题目链接地址 10137 - The Trip
/*
* 10137 - The Trip
* 作者 仪冰
* 语言 C++
* QQ 974817955
*
* 精度处理一小弄。n个学生,每个学生有一个花费,
* 求出平均值,求小于平均值的总和(less),
* 求出大于平均值的总和(greatly),最后再进行less和grealy比较,输出最大的。
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int SIZE = 1000;
const double EXP = 1e-8;
int main()
{
int nStudents = 0; //学生总数
double everyStudentCost[SIZE]; //存储每个学生的花费
double totalCost = 0.0; //花费总数
double average = 0.0; //平均值
double less = 0.0; //少于平均值
double greatly = 0.0; //多于平均值
while (cin >> nStudents)
{
if (nStudents == 0)
{
break;
}
//初始化
totalCost = 0.0;
average = 0.0;
less = 0.0;
greatly = 0.0;
//输入
for (int i=0; i<nStudents; i++)
{
cin >> everyStudentCost[i];
}
//求总花费
for (int i=0; i<nStudents; i++)
{
totalCost += everyStudentCost[i];
}
//求平均值
average = totalCost / nStudents;
//求less和greatly的值
for (int i=0; i<nStudents; i++)
{
if (everyStudentCost[i] < average)
{
//精度处理,保留两位小数。先乘以100取其整数部分,然后再除以100.00
less += ((int)(100*(average - everyStudentCost[i])) / 100.00);
}
else
{
greatly += ((int)(100*(everyStudentCost[i] - average)) / 100.00);
}
}
//求出less和greatly中的最小值
if (less > greatly)
{
cout.precision(2);
cout.setf(ios::fixed | ios::showpoint);
cout << "$" << less << endl;
}
else
{
cout.precision(2);
cout.setf(ios::fixed | ios::showpoint);
cout << "$" << greatly << endl;
}
}
return 0;
}