這個題主要的點有以下幾個:
1.精度。我的處理方法是,四捨五入後乘以相應的倍數,強制轉換爲整型,再強制轉換爲雙精度,再除以相應的倍數。
2.怎麼理解這個使得每個人的支出差距在1分錢以內和最小總“交易”額。我是搜了幾個博客終於有一個哥們比較靠譜。我的理解是,跟平均數比一比,分別求出高於平均值收的錢,和低於平均值出的錢,輸出兩者中最小的。
3.最後才發現WA是因爲MAX設的是100……佩服OJ的測試……
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <memory.h>
#define MAX 1000
int main()
{
double money[MAX+1] = {0};
int n;//人數
int i = 1;//計數
double sum = 0;//總錢
double average = 0;//平均錢
double aveMoney1 = 0;//平攤的錢
double aveMoney2 = 0;//平攤的錢
double minsum;
double sum1;
while (scanf("%d", &n))
{
aveMoney1 = 0;
aveMoney2 = 0;
if(n==0)
{
break;
}
memset(money, 0, sizeof(money));
sum = 0;
average = 0;
for (i = 0; i < n; i++)
{
scanf("%lf", &money[i]);
sum+=money[i];
}
average = sum / n;
average = (double)((int)((average + 0.005)*100))/100;
for (i = 0; i < n; i++)
{
if(money[i] < average)
{
aveMoney1+=average - money[i];
}
else
{
aveMoney2+=money[i] - average;
}
}
if (aveMoney1 < aveMoney2)
{
minsum = aveMoney1;
}
else
{
minsum = aveMoney2;
}
printf("$%.2lf\n", minsum);
}
return 0;
}