当前位置:文档之家› C 语言程序设计 大作业题目

C 语言程序设计 大作业题目

C 语言程序设计 大作业题目
C 语言程序设计 大作业题目

哈尔滨工业大学(威海)2019 / 2020 学年 春 季学期

比赛结果,因而成为乒乓球比赛经常采用的方法。其不足之处在于相对来讲耗时较多,特别是在参赛人数多而比赛时间短的情况下不宜采用。乒乓球比赛一般多采用单循环和分级循环:1.1、单循环

参赛的人或队都要互相轮流比赛1次的方法。单循环比赛的轮数计算:当参赛人数或队数为单数时,轮数等于人(队)数;参赛人数为双数时,轮数等于人(队)数减1。单循环比赛的计算方法是:获胜次数多者名次列前,如有2个或2个以上的运动员获胜次数相同时,则依次由他们之间场数胜负比率、局数胜负比率、分数胜负比率的顺序来决定。

1.2、分组循环

这是将若干人(队)分成几个小组,在各小组内进行循环方法,其特点是要以节省时间,在参赛人数多且比赛时间短的情况下采用。分组循环一般用于团体赛,可将所有参赛队用蛇形方法分组,如12个队参赛可分成A、B两组:

A组:1 4 5 89 12

B组:2 367 10 11

上列数字是各队的顺序号,它是按各队实力强弱排列的,序号小者实力强,反之实力弱。 2、淘汰制

淘汰制就是比赛中失败一次即退出比赛,获胜者继续比赛,直到决出冠亚军为止。这种竞赛方法的特点是节省时间,竞争性强,能使比赛越来越精彩,但也有偶然性。

2.1 单淘汰

所谓单淘汰是指将所有参赛选手编成一定的比赛顺序,由相近的两名选手进行比赛,胜者进

入下一轮,负者即遭淘汰。

2.2双淘汰

双败淘汰制与普通的淘汰制输掉一场即被淘汰不同,参赛者只有在输掉两场比赛后才丧失争夺冠军的可能。双败淘汰制的比赛一般分两个组进行,胜者组与负者组。在第一轮比赛后,获胜者编入胜者组,失败者编入负者组继续比赛。之后的每一轮,在负者组中的失败者将被淘汰;胜者组的情况也类似,只是失败者仅被淘汰出胜者组降入负者组,只有在负者组中再次失败(即总共有两次失败)后才会被淘汰出整个比赛。

每一轮败者组的比赛又分为两个阶段。第一个阶段,由当前败者组中的幸存者相互对阵,负者被淘汰,胜者进入第二个阶段;第二个阶段,由第一阶段中败者组的胜者对阵刚刚在本轮由胜者组中淘汰下来的选手。

以一个8名选手参加的双败淘汰制比赛为例:

第一轮比赛:四场比赛后,各自有4名选手依据结果编入胜者组或败者组

第二轮比赛:胜者组4名选手相互比赛,败者编入败者组,败者组选手在第一阶段先相互比赛,并淘汰掉2名选手,剩下的2名选手再进入第二阶段,与刚在胜者组淘汰到败者组的2名选手比赛,获胜的2名进入第三轮。

第三轮比赛(即败者组决赛):败者组剩下的这2名选手在第一阶段先淘汰掉1名(已累积二败绩),剩下1名进入第二阶段,对阵胜者组决赛中的失败者,败者组决赛中的胜者(到此仅败过1场)将与胜者组决赛中的胜者(到此从未败过),争夺最后的冠军。

在胜者组第一名与败者组第一名最后决赛时,任何一方胜利即获得最终的冠军。

细节说明

方案C最高分85,方案B最高分95分,方案A最高分100分。没有达到指定要求的在最高得分的基础上减去一定的分值。其他细节扣分点包括但不限于如下几点:

1)命令行下输入的候选人姓名要求是不能重复的,也就是不能有两个参赛选手姓名相

2)如果程序运行中要输入姓名,要求参赛选手的姓名对大小写不敏感,也就是A l ice

与a l ice是同一个人,B O B 与b o b是同一个人

3)如果程序运行中要输入比分,比分必须要验证是合理的。

4)命令行中输入参赛人数量时要求验证在题目给定的范围内,如果不在这个范围要求

退出重新运行程序

5)编程前需要斟酌好数据结构,如果数据结构选择不当,导致程序特别复杂或者程序

运行效率降低的会被扣分

6)可以适当使用全局变量

方案C

2020年要举行新一年的乒乓球比赛了,假设去年比赛有两名种子选手今年继续参赛(姓名在命令行中输入,名字各不相同),种子选手要尽量安排在比赛的最后阶段遇到。今年比

赛的选手总数([4-16])和选手名单(名字各不相同)在程序运行时输入。请按照单淘汰的赛制随机列出一份所有比赛场次的比赛名单,每场比赛都是3局2胜制,每场比赛的结果在程序运行阶段输入。每轮比赛前,打印出两两对阵名单,比赛后要输入各场比赛的结果,然后打印出下轮比赛的名单,直到决出今年的前冠亚军为止。程序要求打印出冠军的名字。如果选手数量是单数,可能会轮空,轮空算晋级获胜处理。

请按照题目要求自行设计数据类型和算法,要求每次运行同样的数据输出的结果不一样。 程序运行如:

$./g a m e A l ice Bo b

Num b er of g a m er s:4

G a m er 1:M i k e

G a m er 2:M arr y

G a m er 3: C h ar l ie

G a m er 4: Da v e

(…比赛过程掠过)

A l ice i s t h e wi nn er!

以上紫色字体是命令行输入的字符串,红色字体是程序输出的提示信息,黑色字体是运行程序时输入的参赛者姓名,中间的比赛过程略过了,绿色字体是最终的执行结果。

方案B

2020年要举行新一年的乒乓球比赛了。今年比赛的选手总数([4-6])和选手名单(名字各不相同)在程序运行前作为命令行输入。比赛采用5局3胜的单循环制,每个人都和其他所有人对局,胜负的计算方法是:获胜场数多者名次列前,最后如有2个或2个以上的运动员获胜次数相同时,则由他们净胜局数的顺序来决定,如果还一样就按照他们俩之间的那场对局的胜负决定谁是冠军,如果形成连环套,抽签随机决定名次。请在每轮比赛前,打印出两两对阵名单,每场比赛后要输入比赛的结果,然后打印出所有运动员已经赢得的场次数(按照从大到小的顺序排序),直到决出冠军后按照名次打印出所有人的名字。如果选手数量是单数,可能会轮空,轮空算晋级获胜处理。

请按照题目要求自行设计数据类型和算法,要求每次运行程序对决安排的名单随机。

程序执行如下:

$./g a m e 4 A l ice Bo b C h ar l ie Da v e

以上紫色字体是命令行输入的字符串.

方案A

2020年要举行新一年的乒乓球比赛了。今年比赛的选手总数([8-16])和选手名单(名字各不相同)在程序运行前通过命令行输入。请按照双败淘汰制随机列出一份初始比赛名

单,每场比赛都是3局2胜制,每场比赛的结果在程序运行阶段输入。每轮比赛前,打印出两两对阵名单(相同败率的选手随机安排对局),比赛后要输入各场比赛的结果,然后打印出下轮比赛的名单,直到决出冠亚军为止。最后打印比赛前4名的名字。如果选手数量是单数,可能会轮空,轮空算晋级获胜处理。

程序执行如下:

$./g a m e 8 A l ice Bo b C h ar l ie Da v e E l e F l e mm i ng G or g e H oward

以上紫色字体是命令行输入的字符串.

请按照题目要求自行设计数据类型和算法,要求每次运行同样的数据输出的结果不一样。

方案D 投票选举-最高得票者当选制

题目背景介绍

假设我班需要选举一名课代表,在初轮选举后,已经有M([3-9])位同学成为了候选人。在接下来的选举中,有[10-30]名同学参与投票,每位同学都必须参与,但若名字和所有候选人都不相符,属于弃票。投票表决的方式有很多种,请用最高得票者当选制的投票方式D完成选举(最高分80,晚提交扣分,但早提交没有加分)。

每个投票者只能投给一个候选人(如下图所示),取得最多选票的候选人获胜,获胜者没有必要取得半数选票。如果最高得票者得票数相同,则需要打印出所有获胜者的姓名。

程序要求在命令行输入所有候选人的姓名后,启动程序,然后输入总共参与投票的人数以及各位投票人的选择后输出获胜者,如:

$./v ote A l ice Bo b C h ar l ie

Th i s pro g ra m i s de s i gn ed a n d coded b y xxx s t u de n t id xx

Num b er of v oter s:4

V ote: A l ice

V ote: Bo b

V ote: C h ar l ie

V ote: A l ice

A l ice i s t h e wi nn er!

以上红色字体是程序输出的,黑色字体是投票人的投票信息,绿色字体是最终的执行结果。选择这个方案的同学最高得分80分,没有达到指定要求的在最高得分的基础上减去一定的分值。其他细节扣分点如下:

1)主函数、“投票”、“打印获胜者”需要分别用一个独立的函数实现

2)编程前需要斟酌好数据结构,如果数据结构选择不当,可能导致程序特别复杂或者

程序运行效率降低

3)如果投票的时候输入了错误的候选人姓名,需要将此票作废处理

4)候选人的姓名对大小写不敏感,也就是A l ice与a l ice是同一个人,B O B 与b o b

是同一个人

5)输入投票人数量时要求输入的整数必须在10-30的范围内,如果不在这个范围或

者输入的不是合法的整数,要求重新输入数据,直到达到要求为止

6)运行程序时,候选人名字要在命令行下输入,候选人的数量必须在3-9的范围内,

程序中需要验证候选人的数量

7)命令行下输入的候选人姓名要求是不能重复的,也就是不能有两个候选人姓名相同

8)这种投票方式可能会出现多个优胜者

相关主题
文本预览
相关文档 最新文档