UVa 10137 The Trip (小数四舍五入&需要注意的地方)
2013-10-03 00:35
531 查看
10137 - The Trip
Time limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=29&page=show_problem&problem=1078
A number of students are members of a club that travels annually to
exotic locations. Their destinations in the past have included Indianapolis, Phoenix, Nashville, Philadelphia, San Jose, and Atlanta. This spring they are planning a trip to Eindhoven.
The group agrees in advance to share expenses equally, but it is not practical to have them share every expense as it occurs. So individuals in the group pay for particular things, like meals, hotels, taxi rides, plane
tickets, etc. After the trip, each student's expenses are tallied and money is exchanged so that the net cost to each is the same, to within one cent. In the past, this money exchange has been tedious and time consuming. Your job is to compute, from a list
of expenses, the minimum amount of money that must change hands in order to equalize (within a cent) all the students' costs.
The Input
Standard input will contain the information for several trips. The information for each trip consists of a line containing a positive integer, n, the number of students on the trip, followed by n lines of input,each containing the amount, in dollars and cents, spent by a student. There are no more than 1000 students and no student spent more than $10,000.00. A single line containing 0 follows the information for the last trip.
The Output
For each trip, output a line stating the total amount of money, in dollars and cents, that must be exchanged to equalize the students' costs.Sample Input
3 10.00 20.00 30.00 4 15.00 15.01 3.00 3.01 0
Output for Sample Input
$10.00 $11.99
完整代码:
/*0.019s*/ #include<cstdio> #include<cmath> #include<algorithm> using namespace std; double x[1005]; int main() { int n; double sum, sum2, ave; while (scanf("%d", &n), n) { sum = 0.0; for (int i = 0; i < n; ++i) { scanf("%lf", &x[i]); sum += x[i]; } ave = round(sum / n * 100) / 100;///保留小数点后2位 sum = sum2 = 0.0; for (int i = 0; i < n; ++i) if (x[i] < ave) sum += ave - x[i]; else sum2 += x[i] - ave;///虽然分析上面的四舍五入可以知道选哪个,但那样编程复杂度略高 printf("$%.2f\n", min(sum, sum2)); } return 0; }
相关文章推荐
- 自己总结的一些需要注意的地方,含点个人小技巧&&经验
- Socket:java与C之间的文件传送<3>(JAVA与C通信需要注意的地方)
- struts.xml中<package ...>需要注意的地方
- 以模板的方式重载"operator <<"需要注意的地方
- 把二分查找算法写正确需要注意的地方<转>
- Socket:java与C之间的文件传送<3>(JAVA与C通信需要注意的地方)
- Linux C编程 指针预习需要注意的地方
- 在java中使用常量变量的一些需要注意的地方
- filter做非法用户登录时需要注意的地方
- 写CSS_关于Border你可能需要注意的地方第1/2页
- MergeSort需要注意的地方
- VS2008开发MOSS工作流几个需要注意的地方
- PHP的feof()方法需要注意的地方
- VMware harbor && minio 搭建企业docker私有镜像以及需要注意的问题
- /etc/fstab文件需要注意的地方
- string使用需要注意的地方。
- FPGA之学习FPGA需要注意的地方
- 把QString转换成 char * 中需要注意的地方
- WPF 数据绑定需要注意的地方
- jQuery使用height()获取高度需要注意的地方