主题:ACM简单题,帮我看看哪里错了
石子归并
Time Limit: 1 Seconds Memory Limit: 32768 K
Total Submit:117 Accepted:27
--------------------------------------------------------------------------------
Description
你有一堆石头质量分别为W1,W2,W3...WN.(W<=100000)现在需要你将石头合并为两堆,使两堆质量的差为最小。
Input
该程序有多组测试数据,每组测试数据第一行为整数N(1<=N<=20),表示有N堆石子。接下去N行,为每堆石子的质量。
Output
每组测试数据只需输出合并后两堆的质量差的最小值。
Sample Input
5
5
8
13
27
14
2
4
4
Sample Output
3
0
以下是我的程序,会出现
Runtime Error
SIGSEGV
这是怎么回事????
#include<stdio.h>
int Read (char* array)
{
char c;
long i=0,sum=0,j;
while((c=getchar())!='\n')
array[i++]=c;
for(j=0;j<i;j++)
sum=sum*10+(array[j]-'0');
return sum;
}
int main()
{
long v1,v2,v3,C;
long temp;
long i;
char a[15],c[2];
while((C=getchar())!=EOF)
{
i=0;
v1=v2=0;
c[0]=(char)C;
if((c[1]=getchar())!='\n')
i=1;
if(i==0)
v3=c[0]-'0';
else v3=(c[0]-'0')*10+(c[1]-'0');
while(--v3>=0)
{
temp=Read(a);
if(v1==0)
v1+=temp;
else
v2+=temp;
if(v1>v2)
{
v1=v1-v2;
v2=0;
}
else
{
v2=v2-v1;
v1=0;
}
}
if(v1==0)
printf("%d\n",v2);
else printf("%d\n",v1);
}
return 0;
}
[em10][em10]
Time Limit: 1 Seconds Memory Limit: 32768 K
Total Submit:117 Accepted:27
--------------------------------------------------------------------------------
Description
你有一堆石头质量分别为W1,W2,W3...WN.(W<=100000)现在需要你将石头合并为两堆,使两堆质量的差为最小。
Input
该程序有多组测试数据,每组测试数据第一行为整数N(1<=N<=20),表示有N堆石子。接下去N行,为每堆石子的质量。
Output
每组测试数据只需输出合并后两堆的质量差的最小值。
Sample Input
5
5
8
13
27
14
2
4
4
Sample Output
3
0
以下是我的程序,会出现
Runtime Error
SIGSEGV
这是怎么回事????
#include<stdio.h>
int Read (char* array)
{
char c;
long i=0,sum=0,j;
while((c=getchar())!='\n')
array[i++]=c;
for(j=0;j<i;j++)
sum=sum*10+(array[j]-'0');
return sum;
}
int main()
{
long v1,v2,v3,C;
long temp;
long i;
char a[15],c[2];
while((C=getchar())!=EOF)
{
i=0;
v1=v2=0;
c[0]=(char)C;
if((c[1]=getchar())!='\n')
i=1;
if(i==0)
v3=c[0]-'0';
else v3=(c[0]-'0')*10+(c[1]-'0');
while(--v3>=0)
{
temp=Read(a);
if(v1==0)
v1+=temp;
else
v2+=temp;
if(v1>v2)
{
v1=v1-v2;
v2=0;
}
else
{
v2=v2-v1;
v1=0;
}
}
if(v1==0)
printf("%d\n",v2);
else printf("%d\n",v1);
}
return 0;
}
[em10][em10]