笔试题目
不断按行读入格式为“打分数量-分数1-分数2-分数n”的串,去掉最高分、最低分,求平均分,以保留小数点2位输出。
C++答案:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <numeric>
#include <iomanip>
using namespace std;
void main()
{
vector<double> vecScore;
string strLine;
const char* sep = "-";
char* p;
char* next = nullptr;
while (getline(cin, strLine))
{
char temp[256];
strcpy_s(temp, 256, strLine.c_str()); // strcpy_s 第二个参数为目标字符串缓冲区的大小
p = strtok_s(temp,sep,&next);
while (nullptr != p && strcmp(p,strLine.c_str()))
{
vecScore.push_back(atof(p));
p = strtok_s(nullptr, sep,&next); // 后续调用 第一个参数为null
}
if(!vecScore.empty())
{
sort(vecScore.begin() + 1, vecScore.end());
double sum = accumulate(vecScore.begin() + 2, vecScore.end() - 1, 0); // 去除总数,最小和最大
double result = sum / (vecScore[0] - 2);
cout << setprecision(2) << result;
vecScore.clear();
}
}