在线编译器 C

#include <stdio.h> int main() { int n, i=0, cymma, save_n ,m; scanf ("%d" ,&n); while( i <= 9){ save_n = n; cymma=0; while(n!=0){ m=n%10; if(m == cymma ){ cymma++; if(cymma>=2){ printf("YES\n"); return 0; } } n=n/10; } i++; } print("NO"); return 0; }
这段代码试图判断一个整数中是否包含至少两个相同的数字。但代码的逻辑存在一些问题,导致它不能正确工作。

主要问题在于变量 `cymma` 的使用方式。你把它当作计数器来用,但它的初始值是0,然后在循环中与数字 `m` 比较,只有当 `m` 恰好等于 `cymma` 时才会递增。这意味着它只能检测到数字0、1、2...这样连续出现的顺序,而不是任意重复的数字。例如,数字 `11` 中两个1重复,但第一个1不等于0,所以不会触发计数。

另外,外层循环 `while(i <= 9)` 没有实际作用,因为内层循环已经处理了所有数字,而且 `i` 没有在循环中改变,这会导致无限循环或多余操作。

- 检查 `cymma` 的初始值和比较逻辑。你需要一个方法来记录每个数字出现的次数,而不是依赖数字本身的值。
- 思考如何用数组来统计0到9每个数字出现的次数,然后判断是否有数字出现次数大于等于2。