Онлайн компилятор C

#include <stdio.h> int main() { int n, n_0, m = 0, i = 0, a; scanf("%d", &n); n_0 = n; while (i < 10) { while (n != 0) { m = 0; a = n % 10; if (a == i) m++; n = n / 10; } n = n_0; if (m >= 2) printf("%d ", i); i++; } return 0; }
这段代码的目的是统计一个整数中每个数字(0-9)出现的次数,并输出那些出现次数大于等于2的数字。但代码中存在逻辑错误,导致无法正确统计。

主要问题在于变量 `m` 的使用方式。每次内层循环处理完一个数字后,`m` 被重置为0,但内层循环结束后,`m` 的值只反映了最后一个数字是否等于当前 `i`,而不是整个数字中该数字出现的总次数。

- 内层循环中 `m = 0;` 放在了循环内部,导致每次检查一个数位时 `m` 都被清零,无法累加计数。
- 应该在内层循环开始前将 `m` 初始化为0,然后在循环内对匹配的数字进行累加。