回 帖 发 新 帖 刷新版面

主题: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]

回复列表 (共2个回复)

沙发

貌似跟哈副曼数差不多啊

板凳

但你还没有正面回答我啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册