一道面试题
来源:互联网 发布:淘宝店铺新店扶持政策 编辑:程序博客网 时间:2024/06/03 05:07
射击运动员10发打中90环有多少种可能,请编写程序计算出来,并打印出结果,0环和10环均有效。
打中90环就是没打中10环,所以打中90环跟打中10环的可能性是一样的。
然后开始递归狂打枪,一到10就记录(if(paramS + i == 10) {S++;break;});
在循环的控制中已经排除了大于10的可能性(i<= 10 - paramS);
如果不到10,并且还未打到10枪就继续打下一枪(else if(paramCount > 0)CountOut(paramS + i, paramCount - 1); );
如果已经打足了10枪就结束。
其中函数中的参数paramS是记录目前总共打了多少环了,paramCount记录还能打几枪。
#include "stdio.h"
int S = 0;
void CountOut(int paramS, int paramCount)
{
for(int i = 0; i<= 10 - paramS; i++)
{
if(paramS + i == 10)
{
S++;
break;
}
else if(paramCount > 0)
CountOut(paramS + i, paramCount - 1);
else
break;
}
}
main()
{
CountOut(0, 10);
printf("%d", S);
}
一般的概率书上都有基本一样的例题的:10个箱子,把它们分成10份,只需要9个间隔;如果把这间隔和箱子看成是一样的东西,那就是10+9=19个位 置;在19个位置里选中9个位置,用来间隔,剩下的10个位置放箱子。或者在19个位置里选中10个位置放10个箱子,即C19,10,等于C19,9.
10发中90环,等同于10发错失10环,等同于10发中10环,即把这10环分成10发,换个形象思维,等同于把10个箱子换成10份,即等同于在19个位置中选9个位置。
即C19,9=19!/(9!×(19-9)),再优化一下算法。
num = 1;
for(i=1;i<=10;i++)
num = num *(9+i)/i;
printf("%d",num);
计算结果:num=92378
- 一道微软面试题
- 一道面试题
- 华为一道面试题
- 一道面试题
- 一道面试题
- 一道sql面试题
- 一道面试题
- 一道面试题
- 一道华为面试题
- 一道面试题
- 一道微软面试题
- 一道c++面试题
- 一道sql面试题
- 关于一道面试题
- 一道面试题
- 一道microsoft面试题
- 一道javascript面试题
- 一道面试题
- [资源数据]合同终止原因代码
- 数的分解
- [资源数据]合同类型代码
- 华为笔试
- 超链接的正则表达式匹配
- 一道面试题
- Build Your Own Video Community With Lighttpd And FlowPlayer (Debian Etch)
- 在linux下防止某个程序被运行两次的方法
- 中国php新动力,Jwork框架即将发表
- IE 打印之activex
- jpetstore4.0学习笔记
- ORACLE存储过程实战之二:游标
- jpetstore4.0学习笔记
- 测试