【精选】83 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开1083 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开10.pdf

【精选】83 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开1083 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开10.pdf

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【精选】83 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开1083 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开10

第 8章 循环、递归与概率 8.3 打靶 面试例题1:一个射击运动员打靶,靶一共有10 环,连开10 枪打中90 环 的可能性有多少种?请用递归算法编程实现。[中国某著名通信企业H 面试题] 解析:靶上一共有10 种可能——1 环到10 环,还有可能脱靶,那就 是0 环,加在一起共11 种可能。这是一道考循环和递归的面试题。我们 在这个程序中将利用递归的办法实现打靶所有可能的演示,并计算出结 果。读者会问,难道一定要使用递归?当然不是。我们也可以连续用 10 个循环语句来表示程序,代码如下: for (i1=0;i1=10;i1++) { for (i2=0;i2=10;i2++) { for (i3=0;i3=10;i3++) { for (i10=0;i10=10;i10++) { if(i1+i2+i3+...+i10=90) Print(); } } } } 但是,上面的循环程序虽然解决了问题,但时间复杂度和空间复杂 度无疑是很高的。比较好的办法当然是采用递归的方式,事实上公司也 就是这么设计的。递归的条件由以下4 步完成: (1)如果出现这种情况,即便后面每枪都打 10 环也无法打够总环 程序员面试宝典 数90,在这种情况下就不用再打了,则退出递归。代码如下: if(score 0 || score (num+1)*10 ) //次数num为0~9 { return; } (2 )如果满足条件且打到最后一次(因为必须打10 次),代码如下: if(num == 0) { store2[num] = score; Output( store2); return; } (3 )如果没有出现以上两种情况则执行递归,代码如下: for(int i = 0; i = 10; ++i) { //这里实际上为了方便把顺序倒了过来,store2[9]是第1 回 //store2[8]是第2 回……store2[0]是第10 回 store2[num] = i; Cumput(score - i, num - 1,store2); } (4 )打印函数,符合要求的则把它打印出来。代码如下: public static void Output(int[] store2) { for(int i = 9; i=0; --i) { Console.Write( {0},store2[i]); } Console.WriteLine(); sum++; } 答案: 用C#编写的完整代码如下: using System ; public class M { //public static int[] store; //相当于设置了全局变量 //这个全局变量sum 是包含在M 类中的

文档评论(0)

tazhiq2 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档