Problem set:运动员打靶10次,求打中90环的所有可能情况,要求用递归算法实现。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 void Compute(int score, int num, int buffer[])
6 {
7 extern void output(int buffer[]);
8 if(score < 0 || score > (num)*10)
9 return ;
10 if(num == 0)//符合条件并且射击完毕
11 {
12 output(buffer);/*输出解集*/
13 return ;
14 }
15 int i;
16 for(i=0;i<=10;i++)
17 {
18 buffer[num-1] = i;
19 Compute(score-i,num-1,buffer);
20 }
21 }
22
23 void output(int buffer[])
24 {
25 int i;
26 for(i=0;i<10;i++)
27 printf("%d ",buffer[i]);
28 printf("
");
29 return;
30 }
31
32
33
34 int main()
35 {
36 int buffer[10];
37 memset(buffer,0,sizeof(buffer));
38 Compute(90,10,buffer);
39 return 0;
40 }