C++要求n(n>= 3)个评委打分,去掉最高分和最低分,剩余n-2个得分的平均值为选手得分
//题目要求n(n>= 3)个评委打分,去掉最高分和最低分,剩余n-2个得分的平均值为选手得分
//具体的算法如下:
//一下两种算法性能的比较
//当n = 100000,第一种方法耗时0.001秒,第二种方法为18.114秒,两种方法的结果都是49999.5
//当n = 1000000,第一种方法耗时0.008秒结果都是500000,第二种方法无法知道,因为第二种方法的运行次数为1000000 * 1000000 = 10000亿次,本人的电脑配置,不知需等待多久,可能需要巨型机吧,可见算法优化很重要
//第一种方法:
#include<iostream>
#include<cmath>
#include <boost/timer.hpp>
using namespace boost;
using namespace std;
void main()
{
int total = 100000;//表示评委人员的人数
//cout << "请输入评委人数" << endl;
//cin >> total;
if (total < 3) //评委人数最低要求3位
{
cout << "评委人数不能小于3位" << endl;
return;
}
int *pnScore = NULL; //指针指向创建所有评委的打分数组
pnScore = new int[total]; //创建评委打分内存空间
// cout << "请输入" << total << "为评委打分" << endl;
int x = 0;
for (int i = 0; i < total; ++i)
{
//cout << "第" << i+1 << "位评委的打分是 score =" ;
//cin >> x;
//pnScore[i] = x;
pnScore[i] = i;
}
_int64 totalScore =0; //全部评委的总分,注意这里的totalScore的类型_int64,如果不是大的类型可能会出现溢出情况,比如当total = 100000的时候,得到的结果是错误的
int min = 0; //保存最低打分
int max = 0; //保存最高打分
min = pnScore[0];
max = pnScore[0];
totalScore = pnScore[0];
timer tm;
for (int j = 1; j < total; ++j)
{
totalScore += pnScore[j];
if (min > pnScore[j])
{
min = pnScore[j];
}
if (max < pnScore[j])
{
max = pnScore[j];
}
}
double result = 0; //选手得分
result =( totalScore - min - max ) / (double)(total - 2);
cout << "最后选手得分是:" << result << "总耗时:" << tm.elapsed() << endl;
int wait;
cin >> wait;
}