5 条题解

  • 4
    @ 2023-11-30 21:19:56

    用数组去接收数字,数组下标代表每个个位数字,用数组的值代表每个数字出现的个数(来自csdn) #include <stdio.h> int main( ) { int i,M,N,b; int a[10]={0}; scanf("%d %d",&M,&N); for(i=M,i<=N;i++) { int num=i;//用变量num去代表i,不然进入while后i的值最终会变成0; while(num>0) { b=num%10; num/=10; a[b]++; } } for(i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }

    • 3
      @ 2023-10-13 23:45:22

      #include <stdio.h>

      int main() { int number[10]={0};

      int m,n,k;
      scanf("%d %d",&m,&n);
      int num=m;
      for(k=1;k<=n-m+1;k++){
      	while(num!=0){
      		number[num%10]++;
      		num/=10;
      	}
      	num=m+k;
      }
       for(int p=0;p<=9;p++){
       	printf("%d ",number[p]);
       }
      
      
      return 0;
      

      }

      • 1
        @ 2024-10-12 0:58:48

        我这个更好理解一些,不过写的话还是按照下面曹操学长写的

        #include <stdio.h>

        int main () {

        int m, n;

        scanf("%d %d", &m, &n);

        int a[10] = {0};

        for (int i = m; i <= n; i++) {

        int k = i;

        while (k > 0) {

        int b = k % 10;

        if (b == 0) {

        a[0]++;

        } else if (b == 1) {

        a[1]++;

        } else if (b == 2) {

        a[2]++;

        } else if (b == 3) {

        a[3]++;

        } else if (b == 4) {

        a[4]++;

        } else if (b == 5) {

        a[5]++;

        } else if (b == 6) {

        a[6]++;

        } else if (b == 7) {

        a[7]++;

        } else if (b == 8) {

        a[8]++;

        } else if (b == 9) {

        a[9]++;

        }

        k /= 10;

        }

        }

        for (int k = 0; k <= 9; k++) {

        printf("%d ", a[k]);

        }

        return 0;

        }

        • 0
          @ 2025-9-18 22:22:33

          直接暴力,不会 数位 dp 的我太菜了😭

          from math import sqrt,ceil,gcd,log;re=lambda:map(int,input().strip().split())
          a = [0] * 10
          m, n = re()
          for i in range(m, n + 1):
              i = str(i)
              for j in i:
                  j = int(j)
                  a[j] += 1
          print(*a)
          
          • 0
            @ 2025-1-5 11:59:14
            #include<stdio.h>
            #include<iostream>
            const int N=10;
            int f[N];
            using namespace std;
            int main()
            {
            int m,n;
            cin>>m>>n;
            for(int i=m;i<=n;i++)
            {
            while(i>0)
            {
            int t=i%10;
            f[t]++;
            i=i/10;
            }
            }
            for(int i=0;i<10;i++)
            {
            cout<<f[i]<<" ";	
            }
            return 0;
            }
            错误在于我用i直接去操作,你应该赋值一个临时变量去操作,在循环次数的控制上应该用N-M这个条件,这个题这样写侥幸ac,请看下面ALEX大佬写的控制条件🚀️
            
            • 1

            信息

            ID
            101
            时间
            1000ms
            内存
            256MiB
            难度
            4
            标签
            (无)
            递交数
            549
            已通过
            250
            上传者