📄 subject_18799.htm
字号:
<p>
序号:18799 发表者:编程吧 发表日期:2002-10-23 15:22:53
<br>主题:请教一个算法
<br>内容:n个参赛选手进行循环赛,每个选手都要与其他n-1个选手比赛,<BR>一个选手每天只能比一场。<BR>当n为偶数时,比赛进行n-1天;<BR>当n为奇数时,比赛进行n天。<BR><BR>请各位帮帮忙。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-23 15:39:39
<br>内容:问题不明确,你想编程干嘛。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-10-23 15:41:27
<br>内容:好象在原来的<程序设计>书中见过类似的算法题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:编程吧 回复日期:2002-10-23 18:13:46
<br>内容:设计一个赛程表
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:落影 回复日期:2002-10-26 10:41:29
<br>内容:好像是着色问题
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:编程吧 回复日期:2002-10-26 22:06:20
<br>内容:具体说来听听
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:落影 回复日期:2002-10-28 09:00:45
<br>内容:我们可以得出总共的比赛数为从n个人中选出2个的组合数<BR>我们把每一个组合看成是一个点,对同一天的比赛点用同一种颜色着色,不同天的比赛点颜色应该不同,把同一个人的比赛点用线相连,只要每一条线的两端的颜色不同即可没有。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jeppeter 回复日期:2002-11-07 11:44:24
<br>内容:我设计了一个算法,这个算法不用什么着色的方法,只用一个移位就可以了,在这个程序中有解释,就在下面,如果不行,可以给我发电子邮件
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:三不 回复日期:2002-11-08 10:21:09
<br>内容:结果不对,比如说1队在第二天和第五天都和4队比赛。<BR>下面是结果:<BR>in day 1 team 6 vs team 1<BR>in day 1 team 5 vs team 2<BR>in day 1 team 4 vs team 3<BR>in day 1 team 3 vs team 4<BR>in day 1 team 2 vs team 5<BR>in day 1 team 1 vs team 6<BR><BR><BR>in day 2 team 6 vs team 2<BR>in day 2 team 5 vs team 3<BR>in day 2 team 3 vs team 5<BR>in day 2 team 2 vs team 6<BR>in day 2 team 4 vs team 1<BR><BR>in day 3 team 2 vs team 1<BR>in day 3 team 1 vs team 2<BR>in day 3 team 6 vs team 3<BR>in day 3 team 5 vs team 4<BR>in day 3 team 4 vs team 5<BR>in day 3 team 3 vs team 6<BR><BR><BR>in day 4 team 3 vs team 1<BR>in day 4 team 1 vs team 3<BR>in day 4 team 6 vs team 4<BR>in day 4 team 4 vs team 6<BR>in day 4 team 5 vs team 2<BR><BR>in day 5 team 4 vs team 1<BR>in day 5 team 3 vs team 2<BR>in day 5 team 2 vs team 3<BR>in day 5 team 1 vs team 4<BR>in day 5 team 6 vs team 5<BR>in day 5 team 5 vs team 6
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jeppeter 回复日期:2002-11-10 08:25:14
<br>内容:多谢你的提醒,我已经对有错误的地方做了修改,下面是已经修改好的文件,如果有错误,请你来指正
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:编程吧 回复日期:2002-11-10 10:50:27
<br>内容:结果不对,<BR>你运行一下就会发现,<BR>比如说第二天,<BR>1比了两场,而6一场都没比
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jeppeter 回复日期:2002-11-11 19:11:39
<br>内容:这一次我修改了以前的算法,发现以前的算法有一个严重的错误,所以一再出现这个问题,而且这次的程序能够让使用者自己决定要有多少个队伍来进行安排赛程,这个思路的启发是从离散数学中得到的,如果再有错误,那我就这辈子再也不编程了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jeppeter 回复日期:2002-11-11 19:19:47
<br>内容:对不起,不应该说我这次的修改就没有问题了,但我对那位一直以来帮助我检查这个程序错误的老兄深表谢意,能否与你交一个朋友,<BR><BR>我的QQ是68233028
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:编程吧 回复日期:2002-11-12 09:27:04
<br>内容:既然你这么有信心,<BR>为了不打击你(呵呵)<BR><BR>我试了6 7都是对的。<BR><BR>不过你能不能给出中文的想法。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:jeppeter 回复日期:2002-11-12 10:41:53
<br>内容:这个算法的数学上的证明,请你看离散数学中的域交换的内容,但我这里只说一个大概,在源代码中有清晰的体现,就是把要分的球队的数量分成两个,一个是奇数,一个是偶数,并在这个基础上构建两个数组,一个是正向排列,一个是反向排列,(请记住,对奇偶的构建是有不同的,)<BR>如果是奇数的话,在每一天中移动反向数组一格,如果越界了,就把它的越界部分加到后面去,(原来数组移出来的空格上),这时两两相对应的组就是这一天要比赛的两个队了,但这里可能在两个数组的同一个位置出现相同元素的时候,在奇数情况下是不用管的 。这样在移动了NUM_OF_TEAM次之后,这完成了任务<BR><BR>如下图<BR> 对于第一天<BR> 1 2 3 4 5 <BR> 5 4 3 2 1 这里3就是不用比赛的那个队 <BR> <BR> 第二天 <BR> 1 2 3 4 5 <BR> 4 3 2 1 5 这里5就是不用比赛的那个队<BR><BR><BR>但对于偶数个的情况下,与奇数个相类似,就把 偶数-1 作奇数处理可以了,但这时相同的那一个数就不能不管,而是与被没有加入数组队列的那一个队进行比赛<BR>对6个队<BR>如图<BR> 1 2 3 4 5 <BR> 5 4 3 2 1 6队就与这里的3队在这一天进行比赛<BR><BR><BR>如果还有什么有懂的请给<BR>QQ 68233028联系
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jeppeter 回复日期:2002-11-13 09:18:49
<br>内容:在这个程序中还有一个小小的错误,但有可能是致命的,就是内存泄漏,要在main函数的最后要结束之前对增加一段内容<BR><BR>if(team!=NULL)<BR> free(team);<BR>if(teamreversing!=NULL)<BR> free(teamreversing);<BR><BR>这是在设计C++语言程序时最易犯的错误,而且这个错误不易被发现,如果不发现,程序的可靠性就会大打折扣,所以希望别的程序员也要引以为戒<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -