Онлайн компилятор 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) { a = n % 10; if (a == i) m++; n = n / 10; } n = n_0; if (m >= 2) printf("%d ", i); i++; } return 0; }
这段代码的功能是:读入一个整数,然后找出这个整数中出现了至少两次的数字(0-9),并打印出来。

代码的思路是:用外层循环遍历数字0到9,内层循环遍历原整数的每一位,统计当前数字出现的次数。如果次数大于等于2,就打印这个数字。

代码中存在一个逻辑错误。变量m在内层循环中不断累加,但每次进入新的外层循环时,m没有被重置为0。这会导致统计结果不准确。

- 注意变量m的初始化位置。每次检查一个新的数字时,都需要重新开始计数。
- 思考一下,m应该在什么时候被重置为0?