C++ 歌手大赛 注意判断预赛和决赛

歌手大奖赛共有10位评委,为每位选手打分(double型)。预赛部分歌手的分数,为去掉1个最高分、1个最低分后其余8个分数的平均值;决赛部分歌手的分数,为去掉2个最高分、2个最低分后其余6个分数的平均值。通过键盘输入10位评委的打分,以及当前处于哪个阶段(预赛部分用1表示,决赛部分用2表示)。主函数中,只负责输入数据、调用分数计算函数、输出结果,评分计算部分编写独立函数完成。
输入样例
98.5 88 90 93 94 90.4 89 92 88.6 97 2
结尾无空行
输出样例
91.4
结尾无空行
输入样例
98.5 88 90 93 94 90.4 89 92 88.6 97 1
结尾无空行
输出样例
91.75
结尾无空行

先将10位评委分数存储在一维数组中并对数组排序 。然后根据输入的情况,确定去掉几个最高分、最低分,最后计算平均分。

#include<iostream>
using namespace std;
void func(double* p)
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9 - i; j++)
        {
            double temp;
            temp = p[j];
            p[j] = p[j + 1];
            p[j + 1] = temp;
        }
    }
}
double js(double* p)
{
    double sum = 0;
    for (int i = 2; i < 8; i++)
    {
        sum += p[i];
    }
    return sum / 6.0;
}

double ys(double* p)
{
    double sum = 0;
    for (int i = 1; i < 9; i++)
    {
        sum += p[i];
    }
    return sum / 8.0;
}

int main() 
{
    double* p = new double[10];
    for (int i = 0; i < 10; i++)
    {
        cin >> p[i];
    }
    int x;
    cin >> x;
    if (x == 1) {
        cout << ys(p);
    }
    if (x == 2) {
        cout << js(p);
    }
    delete[]p;
    return 0;
}
#include <iostream>
using namespace std;

void fun(double *p ,int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-i-1;j++)
        {
            if(p[i] > p[i+1])
            {
                  double d = p[j];
                  p[j] = p[j+1];
                  p[j+1] = d;
            }
        }
}

double getavg(double *p ,int n,int type)
{
    double sum  =0;
    if(type == 1)
    {
        for(int i=1;i<n-1;i++)
              sum += p[i];
        sum =  sum/(n-2);
    }
   else if(type == 2)
    {
        for(int i=2;i<n-2;i++)
              sum += p[i];
        sum =  sum/(n-4);
    }
    return sum;
}

int main()
{
      double d[10];
      int type;
      for(int i=0;i<10;i++)
          cin>>d[i];
      cin>>type;
      fun(d,10);
      cout<<setprecision(2)<<getavg(d,10,type);
      return 0;
}