甲想好了一个 n 位数字让乙来猜,只要猜的数字位数正确,至多有 1 位与谜底不同,且不同的数字相差不超过 1,就算猜对了。例如谜底是 67,若乙猜 66、68、77、57,就都算对了;猜 167 就不能算对。
输入格式:
输入首先在第一行给出一个不超过 1000 位数的、最高位不是 0 的正整数,是甲给出的谜底。随后若干行,每行给出一个乙猜的数字,都是最高位不是 0 的正整数。直到出现 -1 表示输入结束,这个数字不要做任何处理。题目保证乙至少猜了一次。
输出格式:
对每一个乙猜的数字,如果猜对了就输出 Yes,否则输出 No。
输入样例:
12345678909876
2345678909876
12345678900876
12345678809876
12345678909888
1234567890987
-1
输出样例:
No
No
Yes
No
No
#include <bits/stdc++.h>
using namespace std;
int main (){
string s1,s2;
cin >> s1;
while (1){
cin >> s2;
if(s2=="-1")
break;
if (s1.length()!=s2.length()){
cout <<"No"<<endl;
continue;
}
else {
int cnt = 0;
int i;
for (i = 0;i < s2.length();i++){
if (s1[i] == s2[i])continue;
else if (abs(s1[i]-s2[i]) != 1){
cout <<"No"<<endl;
break;
}
else if (abs(s1[i]-s2[i]) == 1){
cnt++;//统计差值为1的数量
if(cnt>1){
cout<<"No"<<endl;
break;
}
}
}
if (i ==s2.length())cout <<"Yes"<<endl;
}
}
return 0;
}