hdu1172(枚举)

中文题,题意就不解释了。

思路:因为答案一定是四位数,所以只要枚举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 }
原文地址:https://www.cnblogs.com/spongeb0b/p/9329391.html