C语言活字印刷统计次数

img

img


这个题目我觉得是用二维数组,但是后面统计数字出现次数那里怎么用二维数组实现?


#include <stdio.h>


int main()
{
    int x,num,sum[10]={0};
    scanf("%d",&x);
    for(int i =1;i<=x;i++)
    {
        num = i;
        while(num>0)
        {
            sum[num%10] += 1;
            num = num/10;
        }
    }
    for(int i = 0;i<10;i++)
    {
        printf("%d %d\n",i,sum[i]);
    }
}

采纳一下谢谢

一维既可以

int main()
{
   int pages[10]={0};
   int n;
   cin>>n;
   for (int i = 1; i <= n; i++) {
       int tmp=i;
       while (tmp) {
           int x=tmp%10;
           pages[x]++;
           tmp=tmp/10;
       }
   }
   for (int j = 0; j < 10; j++) {
       cout<<j<<" "<<pages[j]<<endl;
    }

    return 0;
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
以下是Python的代码实现,可以用来解决这个问题:

n = int(input())  # 输入书的总页数

# 初始化一个列表,用于记录每个数字需要的活字数
counts = [0] * 10

# 遍历每一页,统计每个数字出现的次数
for i in range(1, n + 1):
    for digit in str(i):
        counts[int(digit)] += 1

# 输出结果
for i in range(10):
    print(f"{i:4d} {counts[i]:4d}")


首先,我们通过 input() 函数获取书的总页数。然后,我们初始化一个列表 counts,用于记录每个数字需要的活字数。我们遍历每一页,将每个数字出现的次数加到 counts 列表中相应数字的计数器上。最后,我们遍历 counts 列表,输出每个数字需要的活字数。

需要注意的是,我们使用了 Python 3.6 引入的一种新的字符串格式化方式 f-string,这样可以更方便地控制输出的格式。例如,f"{i:4d} {counts[i]:4d}" 的意思是将 i 和 counts[i] 分别输出为长度为 4 的整数,如果不足 4 位,则在左侧补上空格。这样可以使输出对齐,更加美观。