注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

Box of Bricks  

2014-03-20 23:25:01|  分类: STL ACM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Little Bob likes playing with his box of bricks. He puts the bricks one upon another and
builds stacks of different height. “Look, I’ve built a wall!” he tells his older sister Alice. “Nah,
you should make all stacks the same height. Then you would have a real wall.” she retorts. After
a little consideration, Bob sees that she is right. So he sets out to rearrange the bricks, one by one,
such that all stacks are the same height afterwards. But since Bob is lazy he wants to do this with
the minimum number of bricks moved. Can you help?
Input
The input consists of several data sets. Each set begins with a line containing the number n
of stacks Bob has built. The next line contains n numbers, the heights hi of the n stacks. You may
assume 1≤n≤50 and 1≤hi≤100. The total number of bricks will be divisible by the number of
stacks. Thus, it is always possible to rearrange the bricks such that all stacks have the sameheight.
he input is terminated by a set starting with n = 0. This set should not be processed.
Output

For each set, first print the number of the set, as shown in the sample output. Then print the
line “The minimum number of moves is k.”, where k is the minimum number of bricks that have
to be moved in order to make all the stacks the same height. Output a blank line after each set.
Sample Input
6
5 2 4 1 7 5
0
Sample Output
Set #1
The minimum number of moves is 5.
Southwestern Europe 1997

本题很有趣,把所有的砖盒移到同一高度,当然,就形成了一块四方形的砖墙了。每
个砖盒的高度不同,需要计算出移动到同一高度所需的最小次数。
其实,先通过砖块的总数量除以砖墙的数量就得出了砖墙的最后高度,那么,用这个
高度减去所有小于它的砖盒的高度,再把所有相减的结果加起来,就正好是需要移动的
次数。
输出时,要注意输出格式应与题目要求的一致,否则,会出现输出格式错误。

#include <fstream>



#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
ifstream cin("aaa.txt");
vector<int>v;
int n,b,sum,avg,e,c=0;
while(cin>>n)
{
if(n==0)break;
c++;
sum=0;
e=0;
v.clear();//清空向量 非常的好
for(int i=0;i<n;i++)

{
cin>>b;
v.push_back(b);
sum=sum+b;
}
avg=sum/n;
for(int j=0;j<v.size();j++)
{
if(v[j]>avg)e=e+(v[j]-avg);
}
cout<<"Set #"<<c<<endl;
cout<<"The minimum number of moves is "<<e<<"."<<endl;
cout<<endl;//产生一空行
}
return 0;
}

小 Bob 喜欢玩砖盒。他把砖块一个叠一个地堆成不同高度的盒子。“看,我堆了一堵
墙!”他告诉他的大姐姐 Alice。“嗯,你该把所有的砖盒建得一样高。这样,你就建成了
一堵真正的墙。”她回答。思索了一会,小 Bob 认为她是对的。然后,他就开始重新摆放
砖盒,一块接一块,最后,所有的砖盒都一样高了。但 Bob 很懒,他想只移动最少数目的
砖块来使所有的砖盒一样高。你能帮助他吗?
2.输入描述
输入包含多个数据集合。每个数据集合的第一行是一个整数 n,表示该 Bob 建的砖盒
个数。第二行则包含 n 个整数,每个整数代表每个砖盒的高度 hi,表示该砖盒中有 hi块砖。
假定 1≤n≤50,1≤hi≤100。
砖块的总数目能被砖盒的数目整除。因此,一定能把各个砖盒移成相同的高度。
输入以 0 结束。不要处理 0。
3.输出描述
对于每个数据集,先打印出该数据集的序号,请参考输出样例。然后打印这样一行“The
minimum number of moves is k.”。这里,k 指把这些砖盒移到同一高度所需的最小次数。
在每个数据集后输出一个空行。
  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017