方正兰亭纤黑 gbk.ttf:悬赏问题!

来源:百度文库 编辑:中科新闻网 时间:2024/05/02 03:49:43
用C语言编写
已知:某大奖赛有n个选手,m(m>2)个评委为依次参赛的选手评判打分:最高分10分,最低分0分。统分规则为:每个选手所得的m个得分中,去掉一个最低分,然后平均为该选手的得分。要求编程:
(1)根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单。
(2)根据各选手的最后得分与各评委给该选手所评分的差别,给各个评委评分的准确性一个定量的评价。并打印出评委的评判水平名次表。
要求在编程过程中,需记下每位选手及评委的编号。

/*
变量说明:
n:n个学生
m:m个评委
score[100][20]:最多可存20个评委对100位选手的打分
num[100]:保存选手序号
sum[100]:保存每位选手的平均分
ping[20]:保存对评委打分能力的指数 用它的评分减去各先手平均分之差的绝对值。
pingnum[20]:保存评委的序号
lower:保存最低分
*/

#include<stdio.h>
#include<math.h>

void main()
{
int i,j,n,m,sum[100],ping[20],pingnum[20],num[100],p=0;
int score[100][20],lower,temp=0;
printf("enter n m:");
scanf("%d",&n);
scanf("%d",&m);

for(i=0;i<m;i++) /*对评委指数和评委序号进行初始化*/
{
ping[i]=0;
pingnum[i]=i+1;
}

for(i=0;i<n;i++) /*对选手序号进行初始化*/
num[i]=i+1;

for(i=0;i<n;i++)
{
printf("enter player %d score:\n",i+1); /*输入每位选手的m位评委的打分*/
for(j=0;j<m;j++)
{
printf("\tenter ping wei %d score:",j+1);
scanf("%d",&score[i][j]);
if(lower>score[i][j])
{
lower=score[i][j]; /*保存最低分*/
}
sum[i]+=score[i][j]; /*计算每位选手的总分*/
}
sum[i]-=lower; /*减去最低分*/
sum[i]/=(m-1); /*计算选手的平均得分*/
for(j=0;j<m;j++)
{
ping[j]+=abs(score[i][j]-sum[i]);/*保存评委的打分指数*/
}
}

for(i=0;i<n;i++) /*根据选手的平均分进行排序*/
{p=i;
for(j=i+1;j<n;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=sum[p];
sum[p]=sum[i];
sum[i]=temp;

temp=num[p];
num[p]=num[i];
num[i]=temp;
}
}

for(i=0;i<m;i++) /*根据评委打分指数对评委进行排序*/
{p=i;
for(j=i+1;j<m;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=ping[p];
ping[p]=ping[i];
ping[i]=temp;

temp=pingnum[p];
pingnum[p]=pingnum[i];
pingnum[i]=temp;
}
}

printf("print player list:\n");
for(i=0;i<n;i++)
{
printf("%d %d\n",i+1,num[i]);
}
printf("\nprint ping wei list:\n");
for(i=0;i<m;i++)
{
printf("%d %d\n",i+1,pingnum[i]);
}

}

这么简单自己做!

思想
1.设计一个数据结构
struct student{
float score; //得到的平均分数
float score_every_teacher[m];//存放m个评委给予的分数,按评委的号码存放;
};
然后就是编写一些操作函数,例如计算平均分数的函数,排序函数

2.这个涉及到概率论与数理统计中的知识.具体可以参考下置信区间检验等知识.

是啊。这样的作业,完全是练手啊。不过第二问有些意思。有些象是社会模型的题。
不过挺麻烦的。如果只是应付作业,就有个简单的输入输出就可以了。

如果想实用。最好有一个菜单,输出方式也可以通过排版来美化一下。

/*data*/
players
judges
/*computer*/
sort
evaluate

不需要概率论,这是计算机题,不是数学题。

#include <stdio.c>
{
int n,m,I,k;
input"请输入有多少个选手"to n; &&参赛选手个数;
goto 12
input"请输入有多少个评委" to m; &&评委的个数;
m>2?m>2:loop 12
int a[n],s[n]=0; &&选手的得分;
for I=1 to n
for k=1 to m
input"评委打的分"to a[n]
s[n]=s[n-1]+s[n]

一年没写了C了,语言忘了

/*
变量说明:
n:n个学生
m:m个评委
score[100][20]:最多可存20个评委对100位选手的打分
num[100]:保存选手序号
sum[100]:保存每位选手的平均分
ping[20]:保存对评委打分能力的指数 用它的评分减去各先手平均分之差的绝对值。
pingnum[20]:保存评委的序号
lower:保存最低分
*/

#include<stdio.h>
#include<math.h>

void main()
{
int i,j,n,m,sum[100],ping[20],pingnum[20],num[100],p=0;
int score[100][20],lower,temp=0;
printf("enter n m:");
scanf("%d",&n);
scanf("%d",&m);

for(i=0;i<m;i++) /*对评委指数和评委序号进行初始化*/
{
ping[i]=0;
pingnum[i]=i+1;
}

for(i=0;i<n;i++) /*对选手序号进行初始化*/
num[i]=i+1;

for(i=0;i<n;i++)
{
printf("enter player %d score:\n",i+1); /*输入每位选手的m位评委的打分*/
for(j=0;j<m;j++)
{
printf("\tenter ping wei %d score:",j+1);
scanf("%d",&score[i][j]);
if(lower>score[i][j])
{
lower=score[i][j]; /*保存最低分*/
}
sum[i]+=score[i][j]; /*计算每位选手的总分*/
}
sum[i]-=lower; /*减去最低分*/
sum[i]/=(m-1); /*计算选手的平均得分*/
for(j=0;j<m;j++)
{
ping[j]+=abs(score[i][j]-sum[i]);/*保存评委的打分指数*/
}
}

for(i=0;i<n;i++) /*根据选手的平均分进行排序*/
{p=i;
for(j=i+1;j<n;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=sum[p];
sum[p]=sum[i];
sum[i]=temp;

temp=num[p];
num[p]=num[i];
num[i]=temp;
}
}

for(i=0;i<m;i++) /*根据评委打分指数对评委进行排序*/
{p=i;
for(j=i+1;j<m;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=ping[p];
ping[p]=ping[i];
ping[i]=temp;

temp=pingnum[p];
pingnum[p]=pingnum[i];
pingnum[i]=temp;
}
}

printf("print player list:\n");
for(i=0;i<n;i++)
{
printf("%d %d\n",i+1,num[i]);
}
printf("\nprint ping wei list:\n");
for(i=0;i<m;i++)
{
printf("%d %d\n",i+1,pingnum[i]);
}

}