作业帮 > 综合 > 作业

一个射击员打靶,请问连开10枪打90环的可能性有多少种?C语言递归实现,正确答案为92378,我的错在哪

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/19 22:03:04
一个射击员打靶,请问连开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,我的错在哪
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);
}
一个射击运动员打靶,靶一共有10环,连开10抢打中90环的可能性有多少种?请用递归算法实现 一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现.[中国某著 用递归算法编程:一个射击选手打靶,靶一共有10环,连10抢打中90环的可能有多少种?多谢大侠们相助! 请问如何用C语言实现下面的迭代和递归的两种算法 在一次打靶射击中,某个运动员打出的环数只有8、9、10三种,在作了多于11次的射击后,所得总环数为100,则该运动员射击 C语言程序题:1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现 某射击运动员在一次训练中,打靶10次的成绩为89环,已知前6次射击的成绩为50环,则他第七次射击时,击中的环数至少是__ 打靶时,甲每打20次可中靶6次,乙每打10次可中7次,若两人同时射击一个靶,则他们都中靶的概率是? 打靶时,靶与射击者相距680米,射击后经三秒射击者听到打靶的声音,声速为340米每秒,求子弹飞行的平均速 c语言递归算法,有一个递归算法如下,则下列叙述正确的是( ).int maze(int a,int b,int c) { 打靶时,靶与射击者之间相距510m,射击后经过2s听到打击靶的声音,声音在空气中的速度为340m... 打靶时,A每打10次可中靶8次,B每打10次可中靶7次,若2人同时射击一个目标,则它们都中靶的概率是(  )