8月18号的练习:HDU 1172&&HDU 2112&&POJ 1321&&POJ 3006&&POJ 1837

猜数字 HDU 1172

一道模拟题:水爆了!!竞无从下手

就是暴力枚举!!

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 struct line
 6 {
 7     int x;
 8     int y;
 9     int z;
10 }a[105];
11 int main()
12 {
13     int a1[5],b2[5];
14     int n,i,j,k,k1,w,sum;
15     while(scanf("%d",&n)!=EOF)
16     {
17         if(n==0)
18             break;
19         for(i=1;i<=n;i++)
20             scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
21         sum=0;
22         for(i=1000;i<=9999;i++)
23         {
24             int d1=0;
25             a1[1]=i%10;
26             a1[2]=(i/10)%10;
27             a1[3]=(i/100)%10;
28             a1[4]=i/1000;
29             for(j=1;j<=n;j++)
30             {
31                 int d=0,vis[5]={0};
32                 b2[1]=a[j].x%10;
33                 b2[2]=(a[j].x/10)%10;
34                 b2[3]=(a[j].x/100)%10;
35                 b2[4]=a[j].x/1000;
36                 for(k=1;k<=4;k++)
37                     if(a1[k]==b2[k])
38                         d++;
39                 if(d!=a[j].z)
40                 {
41                     d1=1;
42                     break;
43                 }
44                 d=0;
45                 for(k=1;k<=4;k++)
46                     for(k1=1;k1<=4;k1++)
47                         if(a1[k]==b2[k1]&&!vis[k1])
48                     {
49                         vis[k1]=1;
50                         d++;
51                         break;
52                     }
53                 if(d!=a[j].y)
54                 {
55                     d1=1;
56                     break;
57                 }
58             }
59             if(d1==0)
60             {
61                 sum++;
62                 w=i;
63             }
64             if(sum==2)
65             {
66                 break;
67             }
68         }
69         if(sum==2)
70             printf("Not sure
");
71         else
72             printf("%d
",w);
73     }
74     return 0;
75 }

HDU Today HDU 2112 参见:http://www.cnblogs.com/tt123/p/3240066.html

棋盘问题 POJ 1321

dfs();先搜列,再搜行。。。

一定不能同时搜行和列!!!

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 using namespace std;
 5 char a[10][10];
 6 int sum,n,m;
 7 int add(int x,int y)
 8 {
 9     int i;
10     for(i=0;i<n;i++)
11         if(a[x][i]=='1')
12             return 0;
13     for(i=0;i<n;i++)
14         if(a[i][y]=='1')
15             return 0;
16     return 1;
17 }
18 void dfs(int x,int t)
19 {
20     if(t==m)
21     {
22         sum++;
23         return ;
24     }
25     if(x>=n)
26         return ;
27     for(int i=0;i<n;i++)
28         if(a[x][i]=='#'&&add(x,i))
29     {
30         a[x][i]='1';
31         dfs(x,t+1);
32         a[x][i]='#';
33     }
34     dfs(x+1,t);
35 }
36 int main()
37 {
38     while(scanf("%d%d",&n,&m)!=EOF)
39     {
40         if(n==-1&&m==-1)
41             break;
42         for(int i=0;i<n;i++)
43             scanf("%s",a[i]);
44         sum=0;
45         dfs(0,0);
46         printf("%d
",sum);
47     }
48     return 0;
49 }

Dirichlet's Theorem on Arithmetic Progressions  POJ 3006

一个素数问题!直接进行判断就行了!!!(注意1的情况)

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stdio.h>
 4 #include<math.h>
 5 using namespace std;
 6 int add(int x)
 7 {
 8     int d;
 9     if(x==1)
10         return 0;
11     d=sqrt((double)x);
12     for(int i=1;i<=d;i++)
13         if(x%i==0&&i!=1)
14             return 0;
15     return 1;
16 }
17 int main()
18 {
19     int n,m,t,i,d;
20     while(scanf("%d%d%d",&n,&m,&t)!=EOF)
21     {
22         if(n==0&&m==0&&t==0)
23             break;
24         d=0;
25         for(i=n;;i+=m)
26         {
27             if(add(i))
28                 d++;
29             if(d==t)
30                 break;
31         }
32         printf("%d
",i);
33     }
34     return 0;
35 }

Balance  POJ 1837

原文地址:https://www.cnblogs.com/tt123/p/3271679.html