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


 

posted @ 2013-07-03 18:06  Predator  阅读(1753)  评论(0编辑  收藏  举报