一个射击运动员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现。

来源:百度知道 编辑:UC知道 时间:2024/06/17 22:29:19
这是我写的程序,问题是一直输出,没有结束的时候,死循环了好像。高手看下,或者另写一个也行。
------------------------------------------
#include<stdio.h>
int score1[10];
void print(int *p)
{
int i;
for(i=0;i<10;i++)
printf("%3d",*(p+i));
printf("\n");
}
void foo(int score,int num)
{
int i;
if(score<0||score>10*num);
else if(num==0)
{
score1[num]=score;sum++;
print(score1);
}
else
{
for(i=0;i<11;i++)
{
score1[num]=i;
foo(num-1,score-i);
}
}
}
void main()
{
int num=10,score=90;
foo(score,num);
}

如果只是根据你的描述,不好做
因为并不知道射击员的命中的分布情况

当然可以假设每枪打中的环数从0-10均匀分布
这样子就比较好做了

下面是我给你修改的
有输出,但不保证正确

##include<stdio.h>
int score1[10], sum;
void print(int *p) {
int i;
for (i = 1; i <= 10; i++)
printf("%3d", *(p + i));
printf("\n");
}
void foo(int score, int num) {
int i;
if (score < 0 || score > 10 * num)
;
else if (num == 0) {
score1[num] = score;
sum++;
print(score1);
} else {
for (i = 0; i < 11; i++) {
score1[num] = i;
foo(score - i, num - 1);
}
}
}
int main() {
int num = 10, score = 90;
foo(score, num);

printf("sum = %d\n",sum);
return 0;
}

数组下标是0~9,但是指针偏移应该是1~10;楼主的代码打出来的第一个数全是0;不知道说的对不对