求解,这道程序题怎么做(只能用C语言或C++)

能答对的我加满分,200分!!

来我翻译一下:
一个GCZY政权要对一个村子里的财富进行均分(外国人对GCD还是仇视的哈),所有人把物质先换成金币,假定金币是可以平分的,然后围在一个圆桌,每个人可以给左边或右边的人一些钱,也可以都给或不给,最终目的是平分,现在要计算的是至少需要传递多少钱。编程实现,输入n个人,后面n行是每个人的钱,输出至少需要传递的钱数。追问

我知道意思╮(╯_╰)╭

追答

帮你翻译成中文,这样才有更多的人来帮你解

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-21
http://blog.csdn.net/sjf0115/article/details/8831688追问

有错误

追答

VC6不支持long long int,改了就行
gcc只有警告的啊

追问

我用的就是gnu gcc

追答

abs随便改个名字,long long 改成long,%lld改成%ld

追问

网上评阅是结果错误

第2个回答  推荐于2016-01-22
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000000+10;
long long A[maxn],C[maxn],tot,M;
int main()
{
int n;
while(scanf("%d",&n)==1)
{
tot=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&A[i]);
tot+=A[i];
}
M=tot/n;
C[0]=0;
for(int i=1;i<n;i++)
C[i]=C[i-1]+A[i]-M;
sort(C,C+n);
long long x1=C[n/2],ans=0;
for(int i=0;i<n;i++)
ans+=abs(x1-C[i]);
printf("%lld\n",ans);
}
return 0;
}追问

什么情况

追答

你用的什么编译器?

追问

gnu gcc

追答

我用dev的编译器应该和你的一样啊,而且我在vs2010下也测试过,都通过了。如果你是测试时才出现这个问题的话,你把你的测试数据贴出来,我再测试一下,如果是编译出现的这种情况,你就检查一下粘贴的时候有没有出现乱码之类的问题。

追问

没有复制错,提交上去是结果错误

追答

把所有scanf("%lld",&A[i])和 printf("%lld\n",ans);的换成scanf("%I64d",&A[i])和 printf("%I64d\n",ans);试一试吧;不同编译器的选择格式不一样。或者选择其他编译器提交试一试吧,如果实在不行就用cin和cout吧。应该也不会超时。

本回答被提问者采纳
相似回答