首页 > 试题广场 >

牛牛数数

[编程题]牛牛数数
  • 热度指数:44758 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛在酒桌上玩一个小游戏,第一个人从 1 开始数数,如果遇到数字中含有数字 4 或数字是 4 的倍数,则跳过这个数字报下一个,谁数错了就要罚酒一杯。

\hspace{15pt}牛牛为了作弊,它想将所有符合规则的数字预先生成出来。请你帮助牛牛列出 1n 之间所有既不包含数字 4 又不是 4 的倍数的整数,按升序输出。

输入描述:
\hspace{15pt}在一行中输入一个正整数 n,满足 1 \leqq n \leqq 10^5


输出描述:
\hspace{15pt}按升序输出所有满足条件的整数,每个数字占一行。
示例1

输入

9

输出

1
2
3
5
6
7
9

说明

19 中,数字 4 含有数字 4 且 4,84 的倍数,应跳过,剩余数字按升序输出。
n=int(input())
for i in range(n+1):
    if i%4 != 0 and ('4' not in str(i)):
        print(i)
发表于 2025-06-23 10:20:59 回复(1)
#include <stdio.h>

int main()
{
    int n,i,j,flag;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        if(i%4)//判断是否是4的倍数
        {
            flag=1;//标记可能为正确结果
            j=i;
            while(j)//判断那些不是4的倍数的数中是否含有4
            {
                if(j%10==4)
                {flag=0;break;}
                j/=10;
            }
            if(flag)
            printf("%d\n",i);
        }
    }
    return 0;
}
发表于 2025-07-09 16:28:03 回复(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次,循环出了问题)。
总之希望我的解题方法能够对大家有所帮助吧,更希望大家能多多提出批评,聊一聊大家的见解,共同进步。



发表于 2025-11-23 15:54:43 回复(2)
n = int(input())
#不包含4的判断方法
def has_no_digit4(num):
    return '4' not in str(num)

#不被4整除的判断方法
def can_not_4(num):
    return num % 4 != 0

for i in range(1,n+1):
    if can_not_4(i) and has_no_digit4(i):
            print(i)

发表于 2025-06-30 16:25:51 回复(0)
n = int(input())
for i in range(1,n+1):
    if i % 4 ==0 or '4' in str(i):
        continue
    else:
        print(i)
发表于 2025-05-27 11:42:50 回复(0)
#include <stdio.h>

int main() {
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
    if(i%4==0)
    {
        continue;
    }
    int t;
    t=i;
    while(t)
    {
        int k=0;
        k=t%10;
        if(k==4)
        {goto f;}
        t=t/10;
    }
    printf("%d\n",i);
    f:
        continue;
}
}
发表于 2026-01-27 17:36:14 回复(0)
#include <stdio.h>
int fun(int n){
    int m;
    while (n) {
        m=n%10;
        if(m==4){
            return 0;
        }
    n/=10;
    }
    return 1;
}
int main(){
    int n;
    scanf("%d",&n);
for(int i=1;i<=n;i++){
    if(i%4!=0&&fun(i)){
        printf("%d\n",i);
    }
}
return 0;
}

发表于 2026-01-12 21:44:34 回复(0)
int main() {
    int a;
    cin >> a;
    for(int i = 1; i <= a; i ++) if(i % 4 != 0 && to_string(i).find('4') == string::npos) cout << i << endl;
}
发表于 2025-12-06 14:39:23 回复(1)
#include <stdio.h>
//一个非常笨的办法
int main() {
    int n,a;
    scanf("%d",&n);
    for(a=1;a<n+1;a++){
        if(a==4||(a%4==0)||(a%10==4)||(a/10%10==4)||(a/100%10==4)||(a/1000%10==4)||(a/10000%10==4))
            continue;
        printf("%d\n",a);
        
    };
    return 0;
}

发表于 2025-11-13 11:07:48 回复(1)
n=int(input())
p=1<=n<=10**5
if p:
    for i in range(1,n+1):
        p1=i%4!=0
        p2='4' not in str(i)
        if p1*p2:print(i)
else:print('超出范围')

发表于 2025-10-30 11:38:02 回复(0)
def contains4(x) -> bool:
    while x > 0:
        if x % 10 == 4:
            return True
        x //= 10
    return False

n : int = int(input())
counter = 1
while counter <= n:
    if not contains4(counter) and counter % 4 != 0:
        print(counter)
    counter += 1

发表于 2025-07-24 11:53:05 回复(0)
#include <iostream>
#include <string>
using namespace std;

bool containsFour(int num) {
    string s = to_string(num);
    return s.find('4') != string::npos;
}

int main() {
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        if (i % 4 == 0 || containsFour(i)) {
            continue;
        }
        cout << i << endl;
    }
    
    return 0;
}

发表于 2026-01-31 13:35:57 回复(0)
666这题有啥意义啊
发表于 2026-01-26 17:18:26 回复(0)
public class Main {
    public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for(int i=1;i<=n;i++){
            if(i%4==0){
                continue;
            }
            System.out.println(i);
        }
    }
}
发表于 2026-01-25 16:00:30 回复(0)
#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;
}
}

发表于 2026-01-23 10:48:46 回复(0)
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
for (int i = 1; i <= n; i++) {
if (i % 4 == 0) continue; // 排除4的倍数
// 检查是否包含数字4
int temp = i;
int hasFour = 0;
while (temp > 0) {
if (temp % 10 == 4) {
hasFour = 1;
break;
}
temp /= 10;
}
if (!hasFour) {
printf("%d\n",i);
}
}}
发表于 2026-01-22 12:45:55 回复(0)
#include <stdio.h>

int main() {
   int n;
   scanf("%d",&n);
   for(int i;i<=n;i++)
   {
    if(i%4!=0)
    printf("%d\n",i);
   }
    return 0;
}
这么些对吗?怎么通过不了
发表于 2026-01-20 22:45:41 回复(1)
n = int(input())

list_nums = []
for i in range(1, n+1):
    if i % 4 == 0:
        pass
    elif '4' in list(str(i)): #判断i包不包含4,注意此时是列表,就要是字符串4
        pass
    else:
        list_nums.append(i)

for i in list_nums:
    print(i)
发表于 2026-01-14 12:43:53 回复(0)
我自罚一杯
发表于 2026-01-12 08:51:55 回复(0)
#include <stdio.h>
int main()
{
   int i,j,n,a[100000];
   scanf("%d",&n);
   for(i=0;i<n;i++)
   a[i]=i+1;
for(i=0;i<n;i++)
for(j=a[i];j>0;j=j/10)
{
    if(j%10==4)
    a[i]=0;
    break;
}
for(i=0;i<n;i++)
if(a[i]!=0&&a[i]%4!=0)
printf("%d\n",a[i]);
    return 0;
}
为什么我的代码不能通过所有测试?求解
发表于 2026-01-09 19:12:39 回复(0)