Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7279 Accepted Submission(s): 4002
#include<iostream> using namespace std; const int N=101; int n; struct M{ int a,b,c;//a,b,c分别是输入的A,B,C }m[N]; int test(int x,int y){ int b[4],c[4],j,i,k=0,s=0,f[4]={0,0,0,0}; c[0]=x%10;//////模拟值 c[1]=(x/10)%10; c[2]=(x/100)%10; c[3]=x/1000; b[0]=m[y].a%10;/////输入值 b[1]=(m[y].a/10)%10; b[2]=(m[y].a/100)%10; b[3]=m[y].a/1000; for(i=0;i<4;i++){//如果模拟值是结果,那么模拟值和输入值相等的位置就是输入正确的位置 if(b[i]==c[i]) k++; } if(k!=m[y].c)//如果正确位置的个数C和模拟值和输入值相等位数不一样,那么模拟值不是正确结果 return 1; for(i=0;i<4;i++)//对B进行判断,如果正确个数也相同就是正确结果对于每个输入值的每位只匹配一次 for(j=0;j<4;j++){ if(b[i]==c[j]&&f[j]==0) { s++; f[j]=1; break; } } if(s==m[y].b) return 0; else return 1; } int main(){ int i,j,k,sign,result; while(cin>>n&&n){ k=0; for(i=0;i<n;i++) cin>>m[i].a>>m[i].b>>m[i].c; for(i=1000;i<=9999;i++){//因为是4位数 sign=1;//赋初值为1,表示初始值是不存在正确结果 for(j=0;j<n;j++){ sign=test(i,j);//模拟值只要不符合一个输入值就不是正确结果,跳出 if(sign) break; } if(!sign){//如果直到测试完所有输入值模拟值都符合要求,那么它是正确值 k++; result=i; } } if(k==1)//如果跑完1000到9999,只有一个值符合要求,这就是正确值。 cout<<result<<endl; else cout<<"Not sure"<<endl; } return 0; }
原文:https://www.cnblogs.com/fromzore/p/9756493.html