在一行中输入一个正整数
,满足
。
按升序输出所有满足条件的整数,每个数字占一行。
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 <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 <iostream>
using namespace std;
#include <string>
int main() {
int n ;
cin >> n;
string s;
bool flag = true;
for(int i = 1; i <= n; ++i){
s = to_string(i);
for(int j = 0; j < s.size(); ++j){
if(s[j] == '4'){
flag = false;
break;
}
else{
flag = true;
}
}
if(i % 4 != 0 ){
if(flag){
cout << i << endl;
}
}
}
}
// 64 位输出请用 printf("%lld")