由于本人的头铁,坚持要写编程题讲解。所以昨天的文章发出去以后阅读量为4,我甚至怀疑是不是还在审核中orz,但是经过我的一番仔细检查发现,并没有,已经过审了,只是单纯的没人看而已(早就说没人看啦)...但是,即使是没人看,我也要写!(哪来的铁头憨憨,不就是为了申请原创凑三篇文章么)
话不多说,请听题:
说李华的学校要开联欢晚会,为了使每一个同学都参与进来,机智的主持人决定要带领观众席的同学们玩一个互动游戏,这个游戏叫——击鼓传花。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。这时爱思考问题(事多)的李华提出了一个十分有趣的问题:有多少种不同的方法可以使得从自己手里开始传的花,传了m次以后,又回到自己手里呢。对于传递的方法当且仅当以下这两种方法,接到花的同学按接球顺序组成的序列是不同的,才视作两种传花的方法不同。比如有3个同学1号、2号、3号,并假设李华同学为1号,花传了3次回到李华手里的方式有1->2->3->1和1->3->2->1,共2种。
答:节目都表演不完总是延迟结束就不要在这种无聊的游戏上浪费时间了好么(闭嘴)这道题我那乍一看还以为是道数学题,甚至想用排列组合,但是关键是双向传递给这个问题增加了难度。后来看了正确答案以后才想到。我们是在编程,要利用好数组等可以记录的优势。所以这道题其实非常简单,只要用数组记录下每一个同学被传到的概率就好了,从第一传开始,依次更新每一个同学的被传到概率表,也就是传到N号同学那么N-1和N+1号同学被传到的概率都要+1,这样传M次以后输出一号同学的概率就是答案。
以下是代码,已经通过OJ测试。
// include<stdio.h>
// void main()
// {
// int n,m;
// int num[30];
// int temp[30];
// scanf(&34;%d %d&34;,&n,&m);
// for (int j = 0; j < n; j++)
// {
// num[j]=0;
// temp[j]=0;
// }
// num[0]=1;
// temp[0]=1;
// for(int i = 1; i <= m; i++)
// {
// for (int j = 0; j < n; j++)
// {
// num[j]=temp[(j+1)%n]+temp[(j-1+n)%n];
// //printf(&34;%d &34;,num[j]);
// }
// for (int j = 0; j < n; j++)
// {
// temp[j]=num[j];
// }
// //printf(&34;\n&34;);
// }
// printf(&34;%d&34;,num[0]);
// }
本文来自“软馨吖”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/cs/52563.html