歌星大赛是一个 经典计算机比赛题目.
题目描述:
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1〜100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现
问题分析
这道题难度较低,实现思路:
- 获取分数,可以手动输入,也可以使用随机数(这里采用手动输入),分数存放在一个数组里,数据类型采用浮点型。
- 求出最高分和最低分。
-
求出总分,然后用总分减去最高分和最低分再除以8,得出选手得分
代码实现:
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
//设立冒泡排序函数
void changenumber(int a[],int n){
int temp = 0; //设置中间变量
for (int i = n-1; i > 0; --i) //从后往前判断
{
for (int j = 0; j < i; ++j) //判断i以前两个数值的大小,最终把这次循环最大的数放到i的位置上去
{
if (a[j + 1] < a[j])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main()
{
int Singer=0;
cout<<"参加比赛的歌手人数为 :";
cin>>Singer;
int iReferee[Singer][10];//存取每个选手的评委分数
int sScore[Singer][3];//存取每个选手的最高分最低分以及最终得分
int arr[Singer];//保存每个选手的最终得分
int n=Singer;
const int iNumber = 10;
cout<<"---------------比赛开始---------------"<<endl;
int j=0;
while(n--){
int iScore = 0;
int iMaxScore= 0;
int iMinScore= 100;
int iAverage = 0;
cout<<"歌手"<<j+1<<"演唱结束,开始评分:"<<endl;
for (int i=0; i<iNumber; i) {
cout<<"裁判 "<<i+1<<" 给出分数 : ";
cin>>iScore;
if (iScore<=100&&iScore>=0){
iReferee[j][i] = iScore;
iAverage += iScore;
if (iScore > iMaxScore)
iMaxScore = iScore;
if (iScore < iMinScore)
iMinScore = iScore;
i++;
}
else{
cout<<"评分有误,请输入1~100之间的评分:"<<endl;
continue;
}
}
cout<<"删除最高分 : "<<iMaxScore<<endl;
cout<<"删除最低分 : "<<iMinScore<<endl;
iAverage = (iAverage - iMaxScore - iMinScore)/(iNumber - 2);
cout<<" 最终得分 : "<<iAverage<<endl;
//-------------------------------------------------
// 在十个评委中找出最公平即评分最接近平均分和最不
// 公平即与平均分的差距最大的评委.
cout<<"---------------筛选评委---------------"<<endl;
// 最不公平的
int iUnfair = 0; //获取最不公平评委的评分与平均分的差
cout<<"最不公平的评委 : "<<endl;
if( fabs(iMaxScore - iAverage) >=fabs(iMinScore - iAverage)){
iUnfair = fabs(iMaxScore - iAverage);
}
else if (fabs(iMaxScore - iAverage) < fabs(iMinScore - iAverage)){
iUnfair = fabs(iMinScore - iAverage);
}
for (int i=0; i<iNumber; ++i) {
if (fabs(iReferee[j][i]-iAverage) == iUnfair)
cout<<"评委 "<<i+1<<" : "<<iReferee[j][i]<<endl;
}
//-------------------------------------------------
// 最公平的
int iFair=100;//获取最公平的评委的评分与平均分的差
cout<<"最公平的评委 : "<<endl;
for(int i=0;i<iNumber;++i){
if(fabs(iReferee[j][i]-iAverage) < iFair) iFair=fabs(iReferee[j][i]-iAverage);
}
for (int i=0; i<iNumber; ++i) {
if (fabs(iReferee[j][i]-iAverage) == iFair)
cout<<"评委 "<<i+1<<" : "<<iReferee[j][i]<<endl;
}
sScore[j][0]=iMaxScore;
sScore[j][1]=iMinScore;
sScore[j][2]=iAverage;
arr[j]=iAverage;
j++;
cout<<"---------------评分结束---------------"<<endl;
}
cout<<"---------------比赛结束---------------"<<endl;
cout<<"-------------得分排名如下-------------"<<endl;
changenumber(arr,Singer);
for(int n=Singer-1;n>=0;n--){
for(int i=0;i<Singer;i++){
if(sScore[i][2]==arr[n]) cout<<"歌手 "<<i+1<<" 得分 "<<arr[n]<<endl;
}
}
return 0;
}
目录
求出总分,然后用总分减去最高分和最低分再除以8,得出选手得分