{暴力}

补一些基础简单题purple7

UVA - 725

 1 #include <cstdio>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 
 5 bool check(int x,int y)
 6 {
 7     int a[10];
 8     memset(a,0,sizeof(a));
 9     if(x<10000||y<10000) a[0]=1;  //
10     if(x<10000&&y<10000) return false;   //
11     while(x)
12     {
13         int temp=x%10;
14         if(a[temp]) return false;
15         a[temp]=1;
16         x/=10;
17     }
18     while(y)
19     {
20         int temp=y%10;
21         if(a[temp]) return false;
22         a[temp]=1;
23         y/=10;
24     }
25 
26     return true;
27 }
28 
29 int main()
30 {
31     int n;
32     int flag=0;
33     while(scanf("%d",&n)&&n)
34     {
35         if(flag)
36         {
37             puts("");
38         }
39         else flag=1;
40         int ok=0;
41         for(int i=1234;;i++)
42         {
43             int y=i*n;
44             if(y>98765) break;
45 
46             if(check(i,y)) ok=1,printf("%d / %05d = %d
",y,i,n);
47         }
48         if(!ok) printf("There are no solutions for %d.
",n);
49     }
50 }
View Code

子集生成:

 1 #include <cstdio>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 //子集生成lrjp188
 5 
 6 //增量法
 7 void print_subset_dxdy(int n,int *A,int cur)
 8 {
 9     for(int i=0;i<cur;i++) printf("%d ",A[i]);  //打印当前集合
10     puts("");
11     int s=cur ? A[cur-1]+1 : 0; // 获取当前元素的最小可能值
12     for(int i=s;i<n;i++)
13     {
14         A[cur]=i;
15         print_subset_dxdy(n,A,cur+1); //递归构造子集
16     }
17 }
18 //位向量法
19 void print_subset_vector(int n,int *B,int cur)
20 {
21     if(cur==n)
22     {
23         for(int i=0;i<n;i++) if(B[i]) printf("%d ",i);
24         puts("");
25         return;
26     }
27     B[cur]=1;  //选第cur个人元素
28     print_subset_vector(n,B,cur+1);
29     B[cur]=0;   //不选第cur个元素
30     print_subset_vector(n,B,cur+1);
31 }
32 //二进制法
33 void print_subset_binary(int n,int s)
34 {
35     for(int i=0;i<n;i++)
36         if(s&(1<<i)) printf("%d ",i);
37     puts("");
38 }
39 
40 int A[1010];
41 int main()
42 {
43     int n;
44     while(scanf("%d",&n)&&n) {
45         printf("增量法:
");
46         print_subset_dxdy(n,A,0);
47         puts("位向量法:");
48         print_subset_vector(n,A,0);
49         puts("二进制法:");
50         for(int i=0;i<(1<<n);i++) //枚举各子集所对应的的编码
51             print_subset_binary(n,i);
52     }
53 }
View Code
原文地址:https://www.cnblogs.com/yijiull/p/7143698.html