| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 372 人关注过本帖
标题:求助 微型篮球赛问题
只看楼主 加入收藏
a987898164
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2018-11-27
  问题点数:0  回复次数:1   
求助 微型篮球赛问题
甲,乙两队进行蓝球比赛,结果甲队以 S:T 获胜(T<S<=10, S,T 由
键盘输入)。比赛中, 甲队得分始终领先(严格大于乙队),规定以任
何方式进一球都只得一分。编程序打印该比赛的每一种可能的不同的
得分过程, 以及所有不同过程的总数。
求大神帮忙编下算法,可有偿
2018-11-27 13:53
Qi_0xfffff8
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-12-27
  得分:0 
想了一个穷举法:用随机数模拟穷举过程

定义一个sum变量,为两队分差,初始为0。定义int t:t=-1代表乙得分,t=1代表甲得分;定义数组int Temp[20](因为20>S+T,其实数组真正用到的只有前S+T个位置)。定义链表List(为了动态管理内存),数据域为大小为20的数组。
Tenp[0]=1。用 while(t!=0) t=rand()%3-1 随机产生t=-1或1;sum+=t,如果sum自增后>0,把t写入数组,如果sum自增后==0,则数组写入1 并赋sum+=2(即此时甲必须得分保证一直领先);如此循环S+T次,检查Temp中-1的个数,若不为S个,重新生成Temp,Temp生成完毕,为得分的一种情况。检查Temp和链表中已有数组是否一致,如一致,重新生成Temp,否则Temp加入链表。
如此循环很多次,统计List中节点个数即总可能数,每个节点数据域的情况即两队得分情况


这种方法相当不准确,只是因为题给的数比较小,在循环次数足够大的情况下能得到答案,抛砖引玉,期待大神的通法。

[此贴子已经被作者于2018-12-27 03:24编辑过]

2018-12-27 02:20







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036953 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved