讨论 / 用自己电脑的编译器通过了,上传代码后编译错误
DevilDust 2013-10-11 01:16:00
点我顶贴 收藏 删除
状态: Compile Error

测评机: Virmain[1]

得分: 0分

提交日期: 2013-10-10 20:47:00

有效耗时: 该状态没有记录

编译错误:

//RQNOJ:UserCode\994229.cpp: In function `void distribute(int*, int, int)’:

//RQNOJ:UserCode\994229.cpp:33: error: `count’ undeclared (first use this function)

//RQNOJ:UserCode\994229.cpp:33: error: (Each undeclared identifier is reported only once for each function it appears in.)

//RQNOJ:UserCode\994229.cpp: In function `int main()’:

//RQNOJ:UserCode\994229.cpp:64: error: `count’ undeclared (first use this function)

//RQNOJ:UserCode\994229.cpp:65:2: warning: no newline at end of file

贴出代码:

#include<iostream>

using namespace std;

#define MAXN 100 //N的最大值

int A_ave=0; //平均每堆的牌数

int count=0; //统计移动纸牌的次数

//找出纸牌数最多的堆,返回最大堆的索引

int find_max(int *A ,int beg, int end)

{

//beg和end分别是搜索的起点和终点

int max = beg;

for(int i=beg; i<=end; ++i)

if(A[i] > A[max])

max = i;

return max;

}

//-----分配纸牌-----

void distribute(int *A ,int a ,int b)

{

//a和b分别是函数作用的起点和终点

if(a==b)

return;

int left_lack=0,right_lack=0;

int max = find_max(A,a,b); //找出最大堆

if(max != a)

{

for(int i=a; i<=max-1; ++i) //计算最大堆左边一共缺多少张纸牌

left_lack += A_ave-A[i];

if(left_lack)

++count;

}

if(max != b)

{

for(int i=max+1; i<=b; ++i) //计算最大堆右边一共缺多少张纸牌

right_lack += A_ave-A[i];

if(right_lack)

++count;

}

A[max] = A[max]-left_lack-right_lack; //最大堆分出纸牌后的牌数

A[max-1] += left_lack; //最大堆左边增加牌数

A[max+1] += right_lack; //最大堆右边增加牌数

if(a!=max)

distribute(A,a,max-1);

if(b!=max)

distribute(A,max+1,b);

return;

}

int main()

{

int A_sum=0;

int N,A[MAXN];

cin>>N;

for(int i=0; i<N; ++i)

{

cin>>A[i];

A_sum += A[i];

}

A_ave = A_sum/N;

distribute(A,0,N-1); //分牌

cout<<count<<endl;

}

#1 jacket68866@2013-10-11 01:16:00
回复 删除
回复 楼主DevilDust 的帖子

新手问同,帮顶。

查看更多回复
提交回复