如何制作竞赛程序

如何制作竞赛程序,第1张

网上找的,希望对你有用单循环赛制 单循环是指所有参赛队在竞赛中均能相遇一次,最后按各队在竞赛中的得分多少、胜负场次来排列名次。 单循环一般在参赛队不太多,又有足够的竞赛时间才能采用。单循环由于参加竞赛的各队都有相遇比赛的机会, 是一种比较公平合理的比赛制度。 一) 单循环比赛的轮数和场数的计算 ① 比赛轮数:在循环制的比赛中,各队都参加完一场比赛即为一轮。 参加比赛的队数为单数时,比赛轮数等于队数。如5个队参加比赛,即比赛轮数为五轮。 参加比赛的队数为双数时,比赛轮数等于队数减一。如6个队参加比赛,则比赛轮数为五轮。 ② 比赛场数:单循环比赛的场数,可用下面的公式计算(简单的数学组合公式): 比赛场数= 队数(队数-1)/2 如6个队或7个队参加比赛,则比赛场数为: 6 (6-1)/2 =15(场) 7(7-1)/2 =21(场) 二)编排竞赛轮次表 不论参赛队是奇数或偶数,均按偶数进行编排。如果参赛队为奇数,则在队数最后加一个“0”,使其成为 偶数。碰到0的队轮空。在编排时,把参赛队平均分成左、右各一半,左一半号数由序号1依次自上向下排,右一半号数按数序依 次自下向上排,然后用横线相连,即构成比赛的第一轮。从第二轮开始,轮转的方法有多种。 常用的有两种: (1) 固定轮转编排法 固定轮转法也叫常规轮转法,是我国传统的编排方法。表17-6为7个队参赛轮次表,它以左边第一号固定不动,逆时针转动,逐一排出。 如表所示:

(链接不过来) (2)一般编排方法。采用“逆时针轮转方法”进行编排,先以阿拉伯数字作为代号,代替队名进行编排。把队数按U型走向分成均等两边,如遇单数队,最后一位数字补为O成为偶数。第一轮只要在U形相对队数之间划横线,即为第一轮比赛秩序。第二轮开始固定左上角1数字,其余数字均按逆时针方向移动一个位置,即为第二轮比赛秩序,以后各轮比赛秩序以此类推。遇O队数即轮空队。 例如,有7个队参加比赛,比赛秩序编排如下所示: 第一轮 第二轮 第三轮 第四轮 第五轮 第六轮 第七轮 1—0 1—7 1—6 1—5 1—4 1—3 1—2 2—7 0—6 7—5 6—4 5—3 4—2 3—0 3—6 2—5 0—4 7—3 6—2 5—0 4—7 4—5 3—4 2—3 0—2 7—0 6—7 5—6 (2)“贝格尔”编排法 从1985年起,世界性比赛多采用“贝格”“编排法。其优点是单数队参加时可避免第二轮的轮空队从第四轮起每场都与前一轮的轮空队比赛的不合理现象。 采用“贝格尔”编排法,编排时如果参赛队为双数时,把参赛队数分一半(参赛队为单数时,最后以“0”表示形成双数),前一半由1号开始,自上而下写在左边;后一半的数自下而上写在右边,然后用横线把相对的号数连接起来。这即是第一轮的比赛。 第二轮将第一轮右上角的编号(“0”或最大的一个代号数)移到左角上,三轮又移到右角上,以此类推。 即单数轮次时“0”或最大的一个代号在右上角,双数轮次时则在左上角。如下表示: 7个队比赛的编排方法 第一轮 第二轮 第三轮 第四轮 第五轮 第六轮 第七轮 1-0 0-5 2-0 0-6 3-0 0-7 4-0 2-7 6-4 3-1 7-5 4-2 1-6 5-3 3-6 7-3 4-7 1-4 5-1 2-5 6-2 4-5 1-2 5-6 2-3 6-7 3-4 7-1 无论比赛队是单数还是双数,最后一轮时,必定是“0”或最大的一个代号在右上角,“1”在右下角。 根据参赛队的个数不同,“1”朝逆时针方向移动一个位置时,应按规定的间隔数移动(见表),“0”或最大代号数应先于“1”移动位置。 间隔移动 参赛队数 间隔数 4队以下 0 5~6队 1 7~8队 2 9~10队 3 11~12队 4 “1”进行间隔移动时,凡遇到“0”或最大代号数时应先越过,不作间隔计算。 一般国内比赛,各队以上届比赛所取得的名次数作为代号,如第1名为“1”,第2名“2”,依此类推。世界性比赛大都采用东道主代号为“1”,上届第1名为“2”,依此类推。有的比赛也采用抽签方法确定代号。

大学生程序设计与算法竞赛系统登陆账号是考生自己的账号。

acm竞赛可以自主报名。acm竞赛是大学生计算机程序设计的竞赛,考生如果想要报名参加的话,只需要登陆官网填写自己的报名资料即可。

看看这个能不能满足你的要求:

#include"stdioh"

void main()

{float a[12][7],b[12],t;

int i,j,k;

float avr(float (x)[7]);

void arry(float px[]);

printf("评委请打分:\n");/按选手编号打分,如,一号选手得分,分别有7个评委打分,然后是二号选手;/

for(i=0;i<12;i++)

{ for(j=0;j<7;j++)

scanf("%d",&a[i][j]);

b[i]=avr(a+i); /计算每个选手的平均成绩/

printf("%d号选手最终得分:%d\n",i+1,b[i]);

}

for(i=11;i>=0;i--)

{k=i;

for(j=i;j<12;j++)

{if(b[j]<b[k])

k=j;

}

if(b[k]!=b[i])

{t=b[i];b[i]=b[k];b[k]=t;}

}

for(i=0;i<12;i++)

{switch(i)

{case 0: printf("一等奖的获得者是:%d\n",i+1);break;

case 1: printf("二等奖的获得者是:%d号选手\n",i+1);break;

case 2: printf("二等奖的获得者是:%d号选手\n",i+1);break;

case 3: printf("三等奖的获得者是:%d号选手\n",i+1);break;

case 4: printf("三等奖的获得者是:%d号选手\n",i+1);break;

case 5: printf("三等奖的获得者是:%d号选手\n",i+1);break;

case 6: printf("三等奖的获得者是:%d号选手\n",i+1);break;

default: break;

}

}

}

float avr(float (x)[7])

{int i,m,n,t,j,k;

float sum=0;

for(i=0;i<7;i++)

{m=(x)[0];

n=(x)[0];

if((x)[i]>m)

j=i;

if((x)[i]<n)

k=i;

}

{t=(x)[6];(x)[6]=(x)[j];(x)[j]=t;}

{t=(x)[5];(x)[5]=(x)[k];(x)[k]=t;}

for(i=0;i<5;i++)

sum+=(x)[i];

return sum/5;

}

# 读取文件 得到分数

with open('0txt', 'r') as f:

txt = fread()

print(txt) # txt = '937 952 998 10 985 973 993 976 981 908'

txtList=txtsplit()#用空格分割为列表

print(txtList) # ['937', '952', '998', '10', '985', '973', '993', '976', '981', '908']

newList = []

for i in txtList:

newListappend(float(i)) # 字符串转浮点数 添加到新列表

print(newList) # [937, 952, 998, 100, 985, 973, 993, 976, 981, 908]

newListremove(max(newList)) # 删除最大 100

newListremove(min(newList)) # 删除最小 908

print(newList) # [937, 952, 998, 985, 973, 993, 976, 981]

lens = 0

for i in newList:

lens += i # 累加

print(lens) # 总计 7795

n = lens / len(newList) # 7795 / 8 平均分 974375

print(round(n,2)) # 四舍五入值 974

import javatextDecimalFormat;

import javautilArrays;

import javautilScanner;

public class Test {

public static void main(String[] args) {

Systemoutprintln("最后总分为:"+input()); }

private static String input()

{

Scanner input=new Scanner(Systemin);

float[] score=new float[8];

for(int i=0;i<8;i++)

{

Systemoutprint("第"+(i+1)+"位裁判分数:");

score[i]=inputnextFloat();

}

sort(score);

return display(score);

}

private static void sort(float[] score)

{

Arrayssort(score);

}

private static String display(float[] score)

{

DecimalFormat df=new DecimalFormat("#00");

double sum=0;

for(int i=1;i<scorelength-1;i++)

{

sum+=score[i];

}

return dfformat(sum);

}

}

2008 年慈溪市小学生计算机程序设计比赛

复赛试题

比赛时间:2008 年 12 月 21 日上午 8:30—10:30

题目概览

中文题目名称 提交源程序文件名 提交可执行文件名 输入文件名 输出文件名 每个测试点时限 测试点数目 每个测试点分值 运行内存上限 时限 促销收费 moneypas moneyexe moneyin moneyout 1秒 10 10 50M 1秒 统计人数 countpas countexe countin countout 1秒 10 10 50M 1秒 队形变换 formationpas formationexe formationin formationout 1秒 10 10 50M 1秒 工作分配 jobpas jobexe jobin jobout 1秒 10 10 50M 1秒

注意事项

1. 每位选手都应先在 D 盘根目录下建立自己的答卷文件夹,该文件夹的名称为自己的考 号; 2. 选手最终所提交的所有文件都必须存放在自己的考生文件夹中, 凡错放及以书面形式提 交的答卷一律视作无效; 3. 每题提交的解答都必须包括以下二个文件,即源程序文件和经编译后生成的可执行文 件,其名称必须与各题中所规定的相一致; 4. 程序中必须采用文件读写的方法来实现数据的输入和结果的输出, 即程序运行时所需输 入数据应从题中指定的输入文件中读取(而不得采用键盘输入的方式) ,程序运行的结果应 写入到题中指定的文件中(而不是输出到屏幕上) 。 5. 用于提供输入数据和记录输出结果的文件的名称都已在题中具体规定, 选手程序在调用 它们时不得为其指定任何特别的路径。 6. 复赛用机房电脑 C 盘均已设置成开机还原保护,选手切勿把程序存放在 C 盘中,否则 如果重新开机后程序将不复存在。 7. 比赛结束后请不要关机。

©慈溪市教育局教研室

慈溪市青少年科技辅导员协会

第 1 页,共 4 页

1 促销收费

(moneypas/exe)

问题描述 元旦快到了,各个商场都开始策划大规模的促销活动。慈溪国际购物中心计划推出“满 300 减 120、满 500 减 240”的活动,也就是顾客购买物品的总金额中每 300 元可以优惠 120 元,每 500 元优惠 240 元,上不封顶。为此,商场收费系统需要进行升级。请你帮助慈溪国 际购物中心设计其中的一段程序, 输入顾客购买物品的总金额后, 即输出优惠后的付款总数。 注意,一定要按最优惠的方法计算哦! 输入 输入文件 moneyin 只有一行,是顾客购买各种物品的总金额 N。 保证为整数,且 N (N ≤2000000000) 输出 输出文件 moneyout 只有一行,即优惠后的付款额。

输入输出样例

moneyin 310 moneyout 190

2 统计人数 统计人数

(countpas/exe)

问题描述 数学竞赛结束后,各个班主任老师都很迫切地想知道自己班级在全年段前 N 名的人数。 于是,教务主任就请来信息学兴趣小组的同学来帮忙,要求编写一程序,只要告诉计算机要 查的班级 K 班和名次前 N 名,然后再输入 M 个学生的成绩,计算机就统计出 K 班在年段 前 N 名中的人数。 (假设每个学生的总分各不相同) 输入 输入文件 countin 共 M+1 行 第一行三个整数依次为 M,K,N,分别表示全年段共有 M 个学生,要统计的是 K 班 在全年段前 N 名的人数。 (M≤1000,K≤20,N≤M) 接下来 M 行是 M 个学生的班级和成绩,中间用一个空格隔开。 输出 输出文件 countout 共一行,表示 K 班在年段前 N 名中的人数。

输入输出样例

countin 725 2 65 3 90 9 100

©慈溪市教育局教研室

countout 2

慈溪市青少年科技辅导员协会

第 2 页,共 4 页

8 64 2 66 2 80 4 84

3 队形变换

(formationpas/exe)

问题描述 团体 *** 表演中经常要变换队形。 2008 年慈溪市中小学生艺术节开幕式团体 *** 表演中, 在 导演确定了队形分为连续队形(代号 1)和梅花桩队形(代号 2) 两种队形,每种队形又分按 行排列(代号 1)和按列排列(代号 2)两种排列方式。为了使表演队员能够很快地知道自己 该站在哪一行哪一列,请你设计一个程序,输入表演的人数 N、队形代号 X、排列方式代号 Y、每行(或每列)的位置数 R 和表演队员的编号 M 后,输出该队员应该站在第几行第几 列。例如 16 人参加表演,各种排法举例如下: ① N=16,X=1,Y=1,R=6 1 7 13 ② N=16,X=1,Y=2,R=3 1 2 3 ③ N=16,X=2,Y=1,R=7 1 5 8 12 15 ④ N=16,X=2,Y=2,R=6 1 4 2 5 3 6 9 12 8 11 15 7 10 14 13 16 16 9 13 2 6 10 14 3 7 11 4 4 5 6 7 8 9 10 11 12 13 14 15 16 2 8 14 3 9 15 4 10 16 5 11 6 12

若输入 N=16,X=1,Y=2,R=3,M=12,则该队员应站在第 3 行第 4 列。

©慈溪市教育局教研室

慈溪市青少年科技辅导员协会

第 3 页,共 4 页

输入 输入文件 formationin 只有一行,有 5 个用空格隔开的整数,为 N,X,Y,R,M,依 次分别表示参加表演的人数、队形代号、排列方式代号、每行(或每列)的位置数、某一表 演队员的编号。 (N≤10000) 。 输出 输出文件 formationout 共一行,包含两个整数,用一个空格隔开,分别表示某一表演队 员 M 该站在第几行第几列。

输入输出样例

formationin 16 1 2 3 12 formationout 34

4 工作分配

(jobpas/exe)

问题描述 在工厂里,如果每道工序让不同的工人来做,所要花费的时间往往不一样。精明的老板 为了提高效率,总是把生产某一产品所需要的 N 道工序进行最佳搭配,使生产某一产品所 花费的总时间最少。现在就给出 N 个工人分别做 N 道工序所要花费的时间,请你来计算一 下,如果 N 个工人每人做 N 道工序中其中的一道, 那么生产某一产品 (即完成所有 N 道工序) 所要花费的最少时间是多少。 输入 输入文件 jobin 的第 1 行有 1 个整数 N(1≤N≤20),表示有 N 个工人。接下来的 N 行, 每行 N 个数,表示该工人完成各道工序所要花费的时间。 输出 输出文件 jobout 共一行,即生产某一产品所要花费的最少时间。

输入输出样例

jobin 4 1324 3245 3412 4532 jobout 6

以上就是关于如何制作竞赛程序全部的内容,包括:如何制作竞赛程序、大学生程序设计与算法竞赛系统登陆账号是什么、用C语言编写一个能模拟歌手大奖赛计分系统的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9694201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存