单循环比赛日程报告.doc

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

数 据 结 构 课程设计报告 设计题: 单循环比赛日程 院 系: 经济学 专业班级: 电务2008-2 学 指导师 周长红 2010年7月16日 指导教师评语 指导教师: 年 月 日 成绩评定 学 号 任务 成绩 0801060626 宋宇星 编程序、查资料等 0801060623 刘泽梅 写报告、查资料等 目 录 1.设计内容 1 1.1问题描述 1 1.2设计要求 1 1.3开发环境 1 1.4研究思路 1 2.设计步骤 3 2.1需求分析 3 2.2概要设计 3 2.3详细设计 5 2.4调试分析 9 2.5测试结果 12 3.设计成果展示 14 3.1用户手册 14 3.2程序运行部分截图 14 4.总结与心得体会 17 附 录 21 1.设计内容 1.1问题 有n个编号为1到n的运动员参加某项运动的单循环比赛,即每个运动员要和所有其它运动员进行一次比赛。试为这n个运动员安排一个比赛日程,使得每个运动员每天只进行一场比赛,且整个比赛在n-1天内结束。 1.2设计1)输入运动员人数n(n=10000); (2) 输出一个n阶方阵A[1..N,0..N-1],当j0时,A[i,j]表示第i名运动员在第j天的比赛对手。 1.3开发环Microsoft Visual C++ 1.4研究思路 首先,我们要证明老师提供的问题,有错误。 错误在于:整个赛程,当N为偶数的时候,N-1天能够结束,而当N为奇数的时候,只能在至少N天结束。 错误分析:原命题中“整个赛程在N-1天结束”,这在N为奇数下的情况不成立, 因为,由已知“每个运动员要和所有其它运动员进行一次比赛”则每个运动员总共进行N-1场,又由每一场有两个运动员参加,N个运动员就进行了C=[N*(N-1)]/2场比赛,又因为已知“要求每个运动员每天只进行一场比赛”则每人每天只能进行1 场,所有运动员为N,每一场由两个运动员参加,后面分两个方面分析: 1、当N为偶数的时候,每天只能出现的场数为N/2场,推出至少的天数为C/(N/2)=N-1场,这与命题中“且整个赛程在N -1天内结束。”不矛盾 2、当N为奇数的时候,由于每个运动员每天只能进行一场,所以每天能进行的总场数最多只能为(N-1)/2场,则整个赛程的天数最少需要 天数 C/[(N-1)/2]=N天,这与原命题“且整个赛程在N -1天内结束。”矛盾。 比如N=3的时候,每场必须有两个人,则每天只能有一场比赛,假设是1和2比赛,则3号运动员没有对象比赛,所以一天最多一场比赛,这个比赛需要的比赛场数C=3场,则整个比赛需要的天数为C/1=3天 由此依照命题前部分要求得出,当N为偶数的情况 循环赛可以进行N-1天,当N为奇数的时候,循环赛至少要进行N天。 其次,介绍一下研究思路。 这题中,老师给的运动员的人数范围为:n=10000,所以,在处理的时候就要考虑到运行时间的问题以及如何安排的问题。这样就考虑到用“分治法”,即将大数逐步分解成小数,先将小数安排完,在将小数的合并推算成大数的安排方法,这里面就用到了递归的调用问题。 在这个程序的运行过程并不需要像游戏的华丽接口,且要求输出一个矩阵即可,所以,选择比较熟悉的C++环境开发。 2.设计骤 2.1,能用Microsoft Visual C++ 输出想要的结果: 1:输入形式是一个小于10000的正整数。 2:输出一个n阶方阵A[1..N,0..N-1],当j0时,A[i,j]表示第i名运动员在第j天的比赛对手。 因为在输入的数很大时,在C++的运行接口中不能完整的显示出来,故希望通过一种方式把此程序的运行结果导入到WORD或者是TXT檔中,在这里只以导入到TXT中为例。 2.2概要设计 1、定义一个二维数组足够放下所要输出的矩阵,形式如下: #define M 10000 int a[M][M+1],b[M]; 2、按照程序运行顺序,涉及相关的函数: 1)、要有一个主函数,形式如下: main() { …… …… …… tourna(n); …… …… } 2)、将“分”“和”两部分函数整合起来的函数,即: void tourna(int n) { …… } 3)、合并算法: void makecopy(int n) /*合并算法

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档