博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打靶射击[递归]
阅读量:5092 次
发布时间:2019-06-13

本文共 845 字,大约阅读时间需要 2 分钟。

一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能行有多少种?

 

long compute(int score, int num)

{

if (score<0||score>num*10) return 0; //如果剩余还需的分数score<0,说明超过了90分,如果score>num*10,说明剩余的num次无法满足目标环数

if ((num==1&&score<10)||(score==num*10)) return 1; //如果为最后一次射击,而且剩余分数score<10,则还有一种可能;如果剩余分数score刚好等于剩余次数num*10,也就只剩一种可能性

long count = 0;

for (int i = 0; i<=10; i++)

{

count +=compute(score-i,num-1);//当第num次射击射中i环,还剩score-i环,以及num-1次射击机会

}

return count;

}

设f()=0,是一次失败的组合,f()=1是一次成功的组合f(n,sum),n:轮次,sum:本轮及本轮之后应打中的总环数f(1,sum),sum<0||sum>10,则返回0;                sum<=10,这说明最后一枪只要打中sum环,就能满足题设,返回1,即一次组合情况f(2,sum),sum<0||sum>20,则返回0;                sum==20,这说明最后两枪只要打都中10环,就能满足题设,返回1                sum<20,如果倒数第二枪打中x环[0,10],最后一枪打中sum-x环,也就能满足题设,返回1注意这里,上一句就可以描述为当本轮打中x环的情况下,剩下的几轮能打中sum-x环会用多少种情况,也即f(n-1,sum-x)种情况

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

转载于:https://www.cnblogs.com/aquar/archive/2011/03/08/3451405.html

你可能感兴趣的文章
android106 C基本数据类型
查看>>
oc-25-id类型
查看>>
STL 案例分析
查看>>
[ActionScript 3.0] AS3 双A字模型
查看>>
后台管理项目简单小总结------彭记(021)
查看>>
死磕JDK源码之Thread
查看>>
jekyll 安装 ...
查看>>
微信页面关于点击按钮关注公众号放到链接里无关注按钮
查看>>
python 字典处理的一些坑
查看>>
构建oracle12c的Docker镜像
查看>>
用户权限命令(chmod,chown,umask,lsattr/chattr)
查看>>
Maven详解
查看>>
Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
查看>>
数据结构 : Hash Table [II]
查看>>
面向对象的小demo
查看>>
获取地址栏参数
查看>>
java之hibernate之helloworld
查看>>
微服务之初了解(一)
查看>>
Iterator invalidation(迭代器失效)
查看>>
GDOI DAY1游记
查看>>