要做的事有兩個:
(1)四捨五入到cent
(2)找出最小的找零數
四捨五入下篇做詳解,反正就是那樣做。
找出最小的零頭,就是要作兩種版本的sum,
選擇其中之一較小的即可。
忘記寫return 0又吃了幾次RE = ="。
/* ACM 10137 The Trip
* mythnc
* 2011/11/27 20:38:34
* run time: 0.012
*/
#include <stdio.h>
#define MAXS 1000
double input(double *, int);
double roundoff(double);
double exchange(double *, double, int);
int main(void)
{
double student[MAXS];
double average;
int n;
while (scanf("%d", &n) && n != 0) {
average = roundoff(input(student, n));
printf("$%.2f\n", exchange(student, average, n));
}
return 0;
}
/* input: receive input data, return average cost */
double input(double *s, int n)
{
int i;
double sum;
for (i = sum = 0; i < n; i++) {
scanf("%lf", s + i);
sum += s[i];
}
return sum / n;
}
/* roundoff: roundoff average to cent */
double roundoff(double money)
{
return (int)(money * 100 + 0.5) / 100.0;
}
/* exchange: return total amount of exchange money */
double exchange(double *s, double average, int n)
{
int i;
double sum1, sum2;
for (i = sum1 = sum2 = 0; i < n; i++) {
if (s[i] > average)
sum1 += s[i] - average;
if (s[i] < average)
sum2 += average - s[i];
}
return (sum1 < sum2) ? sum1 : sum2;
}
沒有留言:
張貼留言