C++实现歌星大奖赛

C++实现歌星大奖赛

一 、需求分析:
(1)在歌星大奖赛中,每位歌手演唱完,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。歌手的人数在大奖赛开始时确定。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
(3)建立数据文件,保存各位歌星比赛时的所有评委分数,包括最高分,最低分和最后得分,并对比赛结果进行排序输出;
(4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

#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;
}

有什么问题以及改进方法可以在下面留言哦~

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值