在一行中输入一个正整数
,满足
。
按升序输出所有满足条件的整数,每个数字占一行。
9
1 2 3 5 6 7 9
在到
中,数字
含有数字 4 且
为
的倍数,应跳过,剩余数字按升序输出。
#include <stdio.h>
int s(int n) {
while (n % 10 != 0) {
if (n % 10 == 4) {
return 0;
}
n /= 10;
}
return 1;
}
int l(int n) {
while (n / 10 != 0) {
n /= 10;
if (n == 4) {
return 0;
}
}
return 1;
}
int r(int n) {
while (n / 10 != 0 || n % 10 != 0) {
if (n % 10 == 4) {
return 0;
}
n /= 10;
}
return 1;
}
int main() {
int n;
scanf("%d", &n);
if (n <= 1) {
printf("输入错误");
} else {
for (int i = 1; i <= n; i++) {
if (i % 4 == 0) {
continue;
}
if (!s(i) || !l(i) || !r(i)) {
continue;
}
printf("%d\n", i);
}
}
return 0;
} #include <stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)//下面的分类是针对到具体的那个数字。不要理解错误
{
if(i%4>0)//非4的倍数
{
if(i<=10)
{
printf("%d\n",i);
}
else if(i>10)
{
for(int i1=i;i1>0;i1=i1/10)//是为了判断i中的每一位是否有4
{
if(i1%10==4)
{
break;
}
else if(i1%10!=4)//一旦有4就去掉,当i1为个位数时,再余10也是个位
{
if(i1<10)
{
printf("%d\n",i);
}
}
}
}
}
}
return 0;
} 卡在那个去除所有含有4的数字这一步很久(楼主菜)。 for(int i1=i;i1>0;i1=i1/10)//是为了判断i中的每一位是否有4
{
if(i1%10==4)
{
break;
}
else if(i1%10!=4)//一旦有4就去掉,当i1为个位数时,再余10也是个位
{
if(i1<10)
{
printf("%d\n",i);
}
}
} 找到有4的数不难,主要是那个输出部分老是出错,printf函数没放好,导致出现了好几次一样的数(比如111,就会输出3次,循环出了问题)。#include <stdio.h>
#include <stdbool.h>
int main() {
int n = 0;
scanf("%d", &n);
for (int count = 1; count <= n; count++)
{
int temp = 0;
bool is_contains_four = false;
/*
* 是 4 的倍数,直接跳过循环
*/
if (count % 4 == 0)
{
continue;
}
else
{
/*
* 不是 4 的倍数就判断 count 的每一位上是否含有数字 4
*/
temp = count;
while (temp)
{
if (temp % 10 == 4)
{
is_contains_four = true;
break;
}
temp /= 10;
}
if (is_contains_four) continue;
}
printf("%d\n", count);
}
return 0;
}