在线编译器 C

// 统计自然数中哪些数字出现多次,按升序输出 #include <stdio.h> int main() { int n;//输入值 n scanf("%d", &n); int count[10] = {0}; //数组count:10个元素,每个元素初始值为0 //数组中元素:输入自然数中可能出现的每个数字(自然数0123456789)的出现的次数 if (n == 0) //特殊:输入值n// 按升序遍历数字0到9 { count[0] = 1;//元素0出现一次 } else { while (n > 0) { int digit = n % 10;// 取出最后一位数字 digit count[digit]++;// 记录 最后一位数字 digit代表的数 出现次数+1 n = n / 10;//去掉已经计数过的最后一位数字,作为为下次循环的初始值 } } for(int i=0;i<10;i++)// 按升序遍历数字0到9 { if(count[i]>0)//仅打印多次出现的数字 { printf("%d\n", i); } } return 0; }
这段代码的功能是:读取一个自然数n,统计其中每个数字(0-9)出现的次数,然后按升序输出所有出现过的数字(每个数字只输出一次)。

代码逻辑基本正确,但题目要求是“统计哪些数字出现多次”,也就是只输出出现次数大于1的数字,而不是出现次数大于0的数字。

- 第33行的判断条件 `if(count[i]>0)` 会输出所有出现过的数字,包括只出现一次的数字。你需要把条件改为只输出出现次数大于1的数字。
- 另外,当n为0时,你单独处理了count[0]=1,但0只出现了一次,按照题目要求不应该被输出。不过这个特殊处理本身没问题,只是输出条件调整后它自然就不会被输出了。