一个射击员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现,正确答案为92378,我的错在哪我的输出为184756,错在哪,#includeint num = 0;int score[10];voidfind (int remain,int n){if (remain < 0 || remain > 1
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 23:59:29
一个射击员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现,正确答案为92378,我的错在哪我的输出为184756,错在哪,#includeint num = 0;int score[10];voidfind (int remain,int n){if (remain < 0 || remain > 1
一个射击员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现,正确答案为92378,我的错在哪
我的输出为184756,错在哪,
#include
int num = 0;
int score[10];
void
find (int remain,int n)
{
if (remain < 0 || remain > 10 * (n + 1))
return;
if (0 == n)
{
for (score[n] = 10; score[n] >= 0; score[n]--)
\x05{
\x05 if (score[n] < remain)
\x05 return;
\x05 else
\x05 num++;
\x05}
return;
}
for (score[n] = 10; score[n] >= 0; score[n]--)
{
find (remain - score[n],n - 1);
}
}
void
main ()
{
find (90,9);
printf ("num=%d\n",num);
}
一个射击员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现,正确答案为92378,我的错在哪我的输出为184756,错在哪,#includeint num = 0;int score[10];voidfind (int remain,int n){if (remain < 0 || remain > 1
if (0 == n)后面的for循环是用来判断最后一枪的环数的,只可能产生一种可能性,但是按你的写法,num++最多可以在一个循环中运行11次(remain=0时)
函数修改如下即可输出正确答案
#include
int num = 0;
int score[10];
void
find (int remain, int n)
{
if (remain < 0 || remain > 10 * (n + 1))
return;
if (0 == n)
{
for (score[n] = 10; score[n] >= 0; score[n]--)
{
if (score[n] < remain)
return;
else
num++;return;
}
return;
}
for (score[n] = 10; score[n] >= 0; score[n]--)
{
find (remain - score[n], n - 1);
}
}
void
main ()
{
find (90, 9);
printf ("num=%d\n", num);
}