Lotto
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5991 | Accepted: 3806 |
Description
Your job is to write a program that reads in the number k and the set S and then prints all possible games choosing numbers only from S.
Input
Output
Sample Input
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0
Sample Output
1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 1 2 3 13 21 34 1 2 5 8 13 21 1 2 5 8 13 34 1 2 5 8 21 34 1 2 5 13 21 34 1 2 8 13 21 34 1 3 5 8 13 21 1 3 5 8 13 34 1 3 5 8 21 34 1 3 5 13 21 34 1 3 8 13 21 34 1 5 8 13 21 34 2 3 5 8 13 21 2 3 5 8 13 34 2 3 5 8 21 34 2 3 5 13 21 34 2 3 8 13 21 34 2 5 8 13 21 34 3 5 8 13 21 34
___________________________________________
此题是搜索第一题,DFS 虽然不懂但是琢磨了一天后还是明白了。。。。其实 return 的返回,是返回上一次调用它的地方,,,向后运行,如果函数运行到最后那么就 return;也就是说函数运行到最后的话,,,就相当于函数最后有一个return。。。。。。。
1 #include<stdio.h> 2 3 int f[10],a[20],n; 4 void DFS (int wei,int x) 5 { 6 int i; 7 if(wei==7) 8 { 9 for(i=1;i<=5;i++) 10 printf("%d ",f[i]); 11 printf("%d ",f[6]); 12 return; 13 } 14 for(i=x+1;i<=n;i++) 15 { 16 f[wei]=a[i]; 17 DFS(wei+1,i); 18 } 19 } 20 21 int main () 22 { 23 int i,ca=1; 24 while(scanf("%d",&n)!=EOF) 25 { 26 if(n==0)break; 27 if(ca!=1)printf(" "); 28 for(i=1;i<=n;i++) 29 { 30 scanf("%d",&a[i]); 31 } 32 for(i=1;i<=n-5;i++) 33 { 34 f[1]=a[i]; 35 DFS(2,i); 36 } 37 ca++; 38 } 39 }