码迷,mamicode.com
首页 > 其他好文 > 详细

摆积木

时间:2017-07-22 15:41:37      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:clu   结果   while   turn   sample   描述   这一   不同的   高度   

题目描述

zzq很喜欢玩积木。一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。然而此时,他又想把这些积木堆变成高度相同的。但是他很懒,他想移动最少的积木块来实现这一目标,你能帮助他吗?

 

输入

输入包含多组测试样例。每组测试样例包含一个正整数n,表示zzq已经堆好的积木堆的个数。
接着下一行是n个正整数,表示每一个积木堆的高度h,每块积木高度为1。其中1<=n<=50,1<=h<=100。
测试数据保证积木总数能被积木堆数整除。
当n=0时,输入结束。

输出

对于每一组数据,输出将积木堆变成相同高度需要移动的最少积木块的数量。
在每组输出结果之间输出一个空行。

样例输入

6
5 2 4 1 7 5
0

样例输出

5
 

题意概括:

求出将所有积木堆的高度都变为相同需要移动的最少次数。

题意分析:

求出所有积木堆的平均高度,然后用所有高于或低于平均高度的积木堆减去平均高度或用平均高度减去积木堆高度(每一个都要计算),最后所有差的和就是最终结果。
 

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int i,n, sum, k,flag=1;
 7     int a[55];
 8     while(scanf("%d", &n), n != 0){
 9         sum = k = 0;
10         for(i = 0; i < n; i++){
11             scanf("%d", &a[i]);
12             sum += a[i];
13         }
14         k = sum / n;
15         for(i = 0, sum = 0; i < n; i++){
16             if(a[i] > k)
17                 sum += (a[i]-k);
18         }
19         if(flag != 1)
20             printf("\n");
21         printf("%d\n", sum);
22         flag++;
23     }
24     return 0;    
25 } 

 

摆积木

标签:clu   结果   while   turn   sample   描述   这一   不同的   高度   

原文地址:http://www.cnblogs.com/didideblog/p/7221268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!