7-5 猜近似数字 (15分)
甲想好了一个 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<iostream>
using namespace std;
int main(void){
string a,b;
cin>>a;
while(1){
cin>>b;
if( b=="-1")
return 0;
if( a == b ){
cout<<"Yes"<<endl;
}
else if(a.length() != b.length()) {
cout<<"No"<<endl;
}
else if( a.length() == b.length()){
int cnt = 0 ,idx=0;
for( int i=0;i<a.length();i++){
if( a[i] != b[i]){
cnt++;
idx=i;
}
}
if( cnt > 1 ){
cout<<"No"<<endl;
}
else {
int aa = a[idx] - b[idx];
if( aa < 0 )
aa = -aa;
if(aa > 1){
cout<<"No"<<endl;
}
else cout<<"Yes"<<endl;
}
}
}
return 0;
}