Online Compiler 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++; } n=n/10; if(cymma>=2){ printf("YES"); return 0; } } i++; } print("NO"); return 0; }
这段代码试图判断一个整数中是否包含至少两个相同的数字,但逻辑存在明显问题。外层循环 `while(i <= 9)` 没有实际作用,内层循环的逻辑也不正确。

- 变量 `cymma` 的命名和用法令人困惑。你似乎想用它来计数重复数字,但每次循环都将其重置为0,并且用 `if(m == cymma)` 来比较数字和计数器,这不会正确检测重复数字。
- 内层循环中,每次取出数字 `m` 后,你立即检查 `m == cymma`,但此时 `cymma` 是0,所以只有数字0才会被计数。这导致程序只能检测到数字0的重复。
- 外层循环 `while(i <= 9)` 重复执行了10次相同的操作,但每次 `save_n = n` 后,`n` 在内层循环中被修改为0,所以后续循环中 `n` 始终为0,无法正确检查原始数字。

提示:
- 你需要一个方法来记录每个数字(0-9)出现的次数。可以考虑使用一个数组来存储每个数字的出现频率。
- 检查完所有数字后,再判断是否有任何数字出现次数大于等于2。