中文题,题意就不解释了。
思路:因为答案一定是四位数,所以只要枚举1000-9999,如果符合所有条件,那么保存一下答案,记录一下答案的个数,如果答案是唯一的,那么输出它,否则,就不确定。
代码如下:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 struct node{ 5 int num,t,p; 6 }; 7 node a[101]; 8 int check(int i,int j) 9 { 10 int b[4],c[4],t=0,d=0,v[10]={0}; 11 while(i)//分解每一位数 12 { 13 b[t++]=i%10; 14 v[i%10]++;//记录当前位置的数出现过几次 15 i/=10; 16 } 17 int p=a[j].num; 18 while(p) //同上 19 { 20 c[d++]=p%10; 21 p/=10; 22 } 23 int same=0,pos=0; 24 for(int k=0;k<4;k++) 25 { 26 if(v[c[k]])//判断相同数字的个数 27 { 28 same++; 29 v[c[k]]--; 30 } 31 } 32 for(int k=0;k<4;k++)//判断相同位置的个数 33 { 34 if(c[k]==b[k]) 35 pos++; 36 } 37 if(same==a[j].t&&pos==a[j].p)//如果满足这两个条件返回真值 38 return 1; 39 return 0; 40 } 41 int main() 42 { 43 int n; 44 while(cin>>n) 45 { 46 if(n==0) 47 break; 48 for(int i=0;i<n;i++) 49 cin>>a[i].num>>a[i].t>>a[i].p; 50 int flag=0,ans; 51 for(int i=1000;i<=9999;i++) 52 { 53 int t=0;//用于记录满足了几个条件 54 for(int j=0;j<n;j++) 55 { 56 if(check(i,j))//判断是否满足条件 57 t++; 58 } 59 if(t==n)//如果所有条件都满足 60 { 61 ans=i; 62 flag++;//满足条件的个数 63 } 64 } 65 if(flag==1)//如果答案唯一 66 cout<<ans<<endl; 67 else 68 cout<<"Not sure"<<endl; 69 } 70 return 0; 71 }