在一行中输入一个正整数
,满足
。
按升序输出所有满足条件的整数,每个数字占一行。
9
1 2 3 5 6 7 9
在到
中,数字
含有数字 4 且
为
的倍数,应跳过,剩余数字按升序输出。
#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 <iostream>
using namespace std;
int f(int b);
int f(int b){
int i;
while(b){
i=b%10;
b/=10;
if(i==4){
return 1;
}
}
return 0;
}
int main() {
int a, b;
cin>>a;
for(b=1;b<=a;b++){
if(b==4||b%4==0){
continue;
}
if(f(b)){
continue;
}
cout<<b<<endl;
}
} #include <stdio.h>
int main() {
int n;
if (scanf("%d", &n) != 1) {
return 1;
}
if (n < 1 || n > 1e5) {
return 1;
}
for (int i = 1; i <= n; i += 1) {
if (i % 4 != 0 && i % 10 != 4 && i / 10 % 10 != 4 && i / 100 % 10 != 4 && i / 1000 % 10 != 4 && i / 10000 != 4) {
printf("%d\n", i);
}
}
return 0;
}