判断五位数是否含重复数字的C++代码运行错误求排查
五位数重复数字判断代码修复方案
错误原因
你当前代码的核心问题是if判断逻辑覆盖场景不全:
- 仅针对「恰好有两组两个相同数字、剩余一个不同」的极少数特殊场景做了判断,完全没有覆盖仅存在一对重复数字的基础场景,比如输入
11234你的代码会错误输出NO - 没有覆盖三个及以上数字相同的场景,比如输入
11123,你条件里的不等判断会直接排除该类合法场景 - 大量重复组合没有纳入判断,比如个位和百位相同、十位和万位相同这类组合,你的条件里完全没有相关判断逻辑
修复方案
方案1:直接枚举所有两两组合
五位数共5个数字,总共有10种两两组合,只要任意一组相等就符合要求,代码改动最小:
#include <iostream> using namespace std; int main() { int n,a,b,c,d,f; cin >> n; a = n / 10000; b = n / 1000 % 10; c = n / 100 % 10; d = n / 10 % 10; f = n % 10; if(a==b || a==c || a==d || a==f || b==c || b==d || b==f || c==d || c==f || d==f) cout << "YES"; else cout << "NO"; return 0; }
方案2:数字计数法(通用扩展型)
如果后续需要适配更多位数的判断,推荐用计数法,逻辑更简洁,扩展性更强:
#include <iostream> using namespace std; int main() { int n; cin >> n; int cnt[10] = {0}; for(int i = 0; i < 5; i++){ int digit = n % 10; if(++cnt[digit] >= 2){ cout << "YES"; return 0; } n /= 10; } cout << "NO"; return 0; }
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

