C语言 程序 去最高最低分的评分 , 偏心和不偏心的评分

来源:互联网 发布:nx三维软件 编辑:程序博客网 时间:2024/05/19 02:27

4.歌星大奖赛
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。
*问题分析与算法设计
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。

下面是我写的程序,在输入时算出最大最小的是第几个,再算平均分,然后再输出。

#include <stdio.h>

#define N 10

int main()
{
    int sco[N];
    int i;

    int re = 0;
    int max = 0;
    int min = 0;

    for(i = 0;i < N;i++)
    {
        printf("请输入第%d个评委的打分\n",i + 1);
        scanf("%d",sco + i);
if(sco[max] < sco[i])
{
   max = i;
}
if(sco[min] > sco[i])
{
   min = i;
}
    }
    for(i = 0;i < N;i++)
    {
if(i != min && i != max)
{
   re = re + sco[i];
}
    }
    re = re / (N - 2);

    printf("the score = %d\n",re);

    return 0;
}


这是答案的程序:输入的同时算最小最大值和和,然后再输出,比我的程序时间效率高。

#include<stdio.h>
int main()
{
int integer,i,max,min,sum;
max=-32768; /*先假设当前的最大值max为C语言整型数的最小值*/
min=32767; /*先假设当前的最小值min为C语言整型数的最大值*/
sum=0; /*将求累加和变量的初值置为0*/
for(i=1;i<=10;i++)
{
printf("Input number %d=",i);
scanf("%d",&integer); /*输入评委的评分*/
sum+=integer; /*计算总分*/
if(integer>max)max=integer; /*通过比较筛选出其中的最高分*/
if(integer<min)min=integer; /*通过比较筛选出其中的最低分*/
}
printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);
printf("Average score:%d\n",(sum-max-min)/8); /*输出结果*/


*思考题
题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接返平均分)和最不公平(即与平均分的差距最大)的评委,程序应该怎样实现?

最不偏心的我用循环来找出与平均分差距最小的,再循环中需要判断是大于0还是小于0,最偏心的我在最大值和最小值中找出。


#include <stdio.h>

#define N 10

int main()
{
    int sco[N];
    int i;
    int tmp;

    int bias_g = 0;
    int bias_b = 0;
    int re = 0;
    int max = 0;
    int min = 0;

    for(i = 0;i < N;i++)
    {
        printf("请输入第%d个评委的打分\n",i + 1);
        scanf("%d",sco + i);
if(sco[max] < sco[i])
{
   max = i;
}
if(sco[min] > sco[i])
{
   min = i;
}
    }
    for(i = 0;i < N;i++)
    {
if(i != min && i != max)
{
   re = re + sco[i];
}
    }
    re = re / (N - 2);
    tmp = (sco[0] - re >= 0) ? sco[0] - re : re - sco[0];
    for(i = 0;i < N;i++)
    {
if(sco[i] - re < 0)
{
   if(re - sco[i] < tmp)
   {
bias_g = i;
tmp = re - sco[i];
   }
}
else
{
   if(sco[i] - re < tmp)
   {
bias_g = i;
tmp =  sco[i] - re;
   }
}
    }
    bias_b = (re - sco[min]) < (sco[max] - re) ? max : min; 
    
    printf("the score = %d\n",re);
    printf("最偏心的是第%d个评委\n",bias_b + 1);
    printf("最不偏心的是第%d个评委\n",bias_g + 1);

    return 0;
}


一个在努力中的未来程序员,如果有更好的想法,欢迎评论。

0 0
原创粉丝点击