1. 程式人生 > >1050 Sequence Problem : Array Practice

1050 Sequence Problem : Array Practice

Description

整數序列是一串按特定順序排列的整數,整數序列的長度是序列中整數的個數,不可定義長度為負數的整數序列。

兩整數序列A、B的和定義為一個新的整數序列C,序列C的長度是A、B兩者中較長的一個,序列C的每個位置上的整數都是A、B對應位置之和。若序列A、B不等長,不妨假設A比B整數多,那麼序列C中多出B的那部分整數視作A的對應位置上的整數與0相加。

你的任務是計算符合某些要求的整數序列的和,這些序列中的整數都是小於1000的非負整數。

Input

輸入為多行,直到檔案末尾結束。每行第一個整數為N(N<=1000),後接一個長度為N的整數序列。

Output

對輸入的整數序列兩兩相加:第1行和第2行相加、第3行和第4行相加……按順序輸出結果:每行輸出一個整數序列,每兩個整數之間用一個空格分隔。若序列數目不為偶數,則視作補一個長度為0的整數序列相加。

值得注意的是一個長度為0的整數序列也應該有輸出,即使沒有整數輸出,也應該佔有一行,因為“每行輸出一個整數序列”。

Sample Input

3 1 2 3
5 10 15 20 30 50
4 100 200 300 400

Sample Output

11 17 23 30 50
100 200 300 400

HINT

這裡最少要用到一個數組來存數整數序列或整數序列的和。

Append Code

#include <stdio.h>
#include <string.h>
int main()
{
    int N,M,i,j=0,t;
    int a[1005]={0},b[1005]={0},c[1005]={0};
    while(scanf("%d",&N)!=EOF)
    {
        j++;
        if(j%2!=0)//奇數列與偶數列分開表示
        {
            M=N;//記錄奇數列的元素個數
            for(i=0;i<N;i++)
                scanf("%d",&a[i]);
        }
        else
        {
            for(i=0;i<N;i++)
                scanf("%d",&b[i]);
        }
        if(j%2==0)//兩行一輸出
        {
            if(N==0&&M==0)//兩個都是0,直接換行,不輸出c[0]
                printf("\n");
            else
            {
                if(N<M)
                {
                    t=N;
                    N=M;
                    M=t;
                }
                for(i=0;i<N;i++)
                    c[i]=a[i]+b[i];
                printf("%d",c[0]);
                for(i=1;i<N;i++)
                    printf(" %d",c[i]);
                printf("\n");
            }

            memset(a,0,sizeof(a));//初始化陣列。
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
        }
    }
    if(N!=0&&j%2==1)//若總列數為奇數
        {
            printf("%d",a[0]);
            for(i=1;i<N;i++)
                printf(" %d",a[i]);
            printf("\n");
        }
    if(N==0&&j%2==1)
        printf("\n");
    return 0;
}