Online Compiler C

#include <stdio.h> int main() { int n, a, i = -1, q1 = 0, q2 = 0, q3 = 0, q4 = 0, q5 = 0, q6 = 0, q7 = 0, q8 = 0, q9 = 0, q0 = 0; scanf("%d", &n); while (n != 0) { a = n % 10; if (a == 0) q0++; else if (a == 1) q1++; else if (a == 2) q2++; else if (a == 3) q3++; else if (a == 4) q4++; else if (a == 5) q5++; else if (a == 6) q6++; else if (a == 7) q7++; else if (a == 8) q8++; else if (a == 9) q9++; if (q0 == 2 || q1 == 2 || q2 == 2 || q3 == 2 || q4 == 2 || q5 == 2 || q6 == 2 || q7 == 2 || q8 == 2 || q9 == 2) { i = 1; break; } n = n / 10; } if (i == 1) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是:读入一个整数,然后判断这个整数中是否包含至少一个重复出现两次的数字。如果有任意一个数字出现了两次,就输出"YES",否则输出"NO"。

代码通过不断取余数来提取每一位数字,然后用多个计数器分别统计0到9每个数字出现的次数。一旦某个数字的计数达到2,就立即结束循环并输出"YES"。

- 变量i的初始值设为-1,但它的作用其实可以用一个更直接的标志变量来代替,比如用int found = 0;,这样代码意图会更清晰。
- 代码中使用了10个独立的计数器(q0到q9),可以考虑用一个长度为10的数组来存储这些计数,这样代码会更简洁,也更容易扩展。