首页 > 试题广场 >

牛牛数数

[编程题]牛牛数数
  • 热度指数:36286 时间限制: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)
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)
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=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())
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)
n = int(input())

if  1<=n<=10**5:
    list_no4 = []
    for i in range(1,n+1):
        if i%4!=0 and '4' not in str(i):
            list_no4.append(i)
    list_no4.sort()
    print(*list_no4, sep='\n')


发表于 今天 11:04:55 回复(0)
#include <stdio.h>
int panduan(int n)
{
    while(n>0)
    {
        if(n%10==4)
        {
            return 1;
        }
        n=n/10;
    }
    return 0;
}
int main() {
    int n,j;
    scanf("%d",&n);
    for(j=1;j<=n;j++)
    {
    if(j!=4&&j%4!=0&&!panduan(j))
    {
        printf("%d\n",j);
    }
    }
    return 0;
}
发表于 2025-12-20 21:59:17 回复(0)
要进行严格的数位判断
#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;
}

发表于 2025-12-14 10:58:57 回复(0)
n = int(input())
list_1 = []
for x in range(1,n+1):
    list_1.append(x)
    if x % 4 == 0:
        list_1.pop()
for j in list_1:
    print(j,end = " ")
发表于 2025-12-11 19:13:09 回复(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")

发表于 2025-12-11 01:45:24 回复(0)
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for (int i=1;i<=n;i++){
        if(i%4==0){
            continue;
        }
        int v=i;
        bool num=false;
        while (v>0){
            int m=v%10;
            if (m==4){
                num=true;
                break; 
            }
             v=v/10;
        }
        if (!num){
        cout<<i<<endl;
        }
    }
    
    return 0;
}
发表于 2025-12-09 20:03:33 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int temp = 0;
    for(int i =1;i<n+1;++i){
        if(i%4==0){
            continue;
        }else {
            int n = i;
            while(n){
                if(n%10==4){
                    temp++;
                    break;
                }
                n/=10;
           
        }
         if(!temp){
                cout << i<<endl;
            }
    }
    temp = 0;
}
}
发表于 2025-12-07 10:26:47 回复(0)
为什么我这个代码输入56665之后就无法通过了啊
#include <stdio.h>

void print(long num)
{
    long i = 0;
    while(i < num)
    {
        i++;
        if(i % 4 == 0)
        {
            continue;
        }
        printf("%ld\n",i);
    }
}
int main()
{

    long num = 0;
    scanf("%ld",&num);
    print(num);

    return 0;
}
发表于 2025-12-02 09:28:20 回复(0)
#include <stdio.h>
int hasDigit4(int num) {
    while (num > 0) {
        if (num % 10 == 4) {
            return 1;
        }
        num = num / 10;
    }
    return 0;
}
int main() {
    int n;
    scanf("%d", &n);
for (int i = 1; i <= n; i++) {
      if (i % 4 != 0 && !hasDigit4(i)) {
            printf("%d\n", i);
        }
    }
return 0;
}
发表于 2025-11-30 18:24:12 回复(0)
#include <stdio.h>
int si(int a){
    if(a%4==0){
        return 0;
    }
    int j=a;
    int t=a;
    for(;t>0;t=t/10){
       j=t%10;
       if(j==4){
         return 0;
       }
    }
    return a;
}

int main() {
    int n;
    scanf("%d",&n);
    int i=1;
   for(i=1;i<=n;i++){
    if(si(i)!=0){
    printf("%d\n",i);
     }
   }
   return 0;
}
发表于 2025-11-24 10:58:09 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            boolean Cons = String.valueOf(i).contains("4");
            boolean fore = i % 4 == 0;
            if (!Cons && !fore) {
                System.out.println(i);
            }
        }
    }
}
发表于 2025-11-13 11:22:31 回复(0)
#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)