PC110103:The Trip

這個題主要的點有以下幾個:

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;
}


發佈了52 篇原創文章 · 獲贊 33 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章