《ACM程序设计》书中题目 K

本文介绍了一个编程问题解决方案,旨在帮助名为鲍勃的角色通过最少的砖块移动来平衡不同高度的砖墙堆栈。文章详细阐述了解题思路,并分享了编程过程中遇到的错误及解决方法。
题目简要:
   小鲍勃喜欢和他的盒砖一起玩。他把砖块放在另一块砖上,构建不同高度的堆叠。“看,我已经修了一堵墙!”,他告诉他的姐姐爱丽丝。“”不,你应该使所有的堆栈都相同的高度。然后你会有一个真正的墙。“她反驳。经过一点考虑,鲍勃看到她是对的。所以他开始一个一个地重新排列砖块,使所有的堆栈之后是相同的高度。但是因为鲍勃是懒惰的,他想用最少的砖块移动这样做。你能帮我吗?
输入
输入由多个数据集组成。每个集合以包含Bob已经构建的堆栈的数目n的行开始。下一行包含n个数字,n个堆栈的高度hi。您可以假设1 <= n <= 50和1 <= hi <= 100。
砖的总数将被堆叠的数量整除。因此,总是可以重新布置砖,使得所有堆叠具有相同的高度。
输入由以n = 0开始的集合终止。不应处理此集合。
输出
对于每个集合,首先打印集合的编号,如示例输出中所示。然后打印行“最小移动数为k”,其中k是为了使所有堆栈具有相同高度而必须移动的砖块的最小数量。
在每个集合后输出一个空行。
例如:

Sample Input
6
5 2 4 1 7 5
0

Sample Output
Set #1
The minimum number of moves is 5.
 
解题思路:
 
  看到这道题,既然要找最少移动数,就只要把大于平均数的数,给小于平均数的数匀几个。所以只要求出大于平均数的数减去平均数的和就能求出最小移动数。
思路不难,写程序也不难。
  然而,在写的过程中,我还是出现了疏忽。一开始,写完提交一直wrong answer。我也一直搞不懂为什么,最后,当我输入50,50个2是出现0后,以后在输入无论任何数据,得到的答案都是0,终于发现了问题。几个量的初值应该在while内赋值。改过来后顺利通过。

附代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j=1,a[55],sum,ave,answer;
while(cin>>n&&n!=0)
{
sum=ave=answer=0;
   for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
ave=sum/n;
for(i=0;i<n;i++)
{
if(a[i]>ave)
{
answer=answer+(a[i]-ave);
}
}
cout<<"Set #"<<j<<endl<<"The minimum number of moves is "<<answer<<'.'<<endl<<endl;
j++;
    }
    return 0;
}

解题感受:
 这道题真折磨人,由于一个赋值位置的问题,一直耗到凌晨1点多才A掉。细节问题在一开始写的时候就一定要注意,不然,后来再改,真的很难看出来···


源码来自:https://pan.quark.cn/s/a3a3fbe70177 AppBrowser(Application属性查看器,不需要越狱! ! ! ) 不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。 支持iOS10.X 注意 目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。 等到Private Header更新了iOS11版本,我也会进行更新。 功能 [x] 已安装的应用列表 [x] 应用的详情界面 (打开应用,删除应用,应用的相关信息展示) [x] 应用运行时信息展示(LSApplicationProxy) [ ] 定制喜欢的字段,展示在应用详情界面 介绍 所有已安装应用列表(应用icon+应用名) 为了提供思路,这里只用伪代码,具体的私有代码调用请查看: 获取应用实例: 获取应用名和应用的icon: 应用列表界面展示: 应用列表 应用运行时详情 打开应用: 卸载应用: 获取info.plist文件: 应用运行时详情界面展示: 应用运行时详情 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用 INFO按钮用来解析并显示出对应的LSApplicationProxy类 树形展示LSApplicationProxy类 通过算法,将LSApplicationProxy类,转换成了字典。 转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值