1. 程式人生 > >Sequence Problem (IV) : Function Practice (Append Code)

Sequence Problem (IV) : Function Practice (Append Code)

Problem G: Sequence Problem (IV) : Function Practice (Append Code)

Time Limit: 1 Sec Memory Limit: 4 MB
Submit: 6916 Solved: 3489
[Submit][Status][Web Board]
Description

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

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

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


編寫以下函式,使append.c中的main()函式能正確執行:

原型:int max(int a, int b);
功能:返回a和b中較大的一個int值。

原型:int init_seq(int seq[], int size);
功能:把int陣列seq[]中的前size個元素初始化為0。
原型:int get_seq(int seq[]);
功能:按輸入格式的要求,讀取size個元素存放在seq[],返回讀到的元素個數。

原型:int put_seq(int seq[], int size);
功能:按輸出格式的要求,把seq[]中的前size個元素輸出。

原型:int add_seq(int sum_seq[], int add_seq[], int size);
功能:把sum_seq[]和add_seq[]中的前size個元素相加,結果儲存sum_seq[]中。

Input

輸入的第一行為一個整數M(M>0),後面有M行輸入。每行第一個整數為N(N<=1000),後接一個長度為N的整數序列。
Output

對輸入的整數序列兩兩相加:第1行和第2行相加、第2行和第3行相加……按順序輸出結果:每行輸出一個整數序列,每兩個整數之間用一個空格分隔。若最後序列不足兩個,則視作補一個長度為0的整數序列相加。
值得注意的是一個長度為0的整數序列也應該有輸出,即使沒有整數輸出,也應該佔有一行,因為“每行輸出一個整數序列”。
Sample Input
3
3 1 2 3
5 10 15 20 30 50
4 100 200 300 400
Sample Output
11 17 23 30 50
110 215 320 430 50
100 200 300 400
HINT

append.c中的main()函式簡述:

  1. 定義兩個陣列odd_seq[]和even_seq[],分別儲存奇數行輸入的序列和偶數行輸入序列,odd_size和even_size是輸入的序列元素個數。

  2. 輸入總行數m;

  3. 初始化odd_seq[]的全部元素,輸入第一行序列,存入odd_seq[],元素個數存入odd_size;

  4. 從第2行至第m行重複以下步驟:

    4.1 要輸入的是偶數行:even_seq[]全體清0,讀even_seq[],把even_seq[]加到odd_seq[]上,輸出odd_seq[];

    4.2 要輸入的是奇數行時與偶數行操作的變數相反,步驟一致;

  5. 輸出最後一行。

Append Code
append.c,

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_SIZE 1005
int max(int a, int b)
{
    if(a>b)
        return a;
    else
        return b;
}
int init_seq(int seq[], int size)
{
    int i;
    for(i=0;i<size;i++)
        seq[i]=0;
}
int get_seq(int seq[])
{
    int i,size;
    scanf("%d",&size);
    for(i=0;i<size;i++)
        scanf("%d",&seq[i]);
    return size;
}
int put_seq(int seq[], int size)
{
    int i;
    for(i=0;i<size;i++)
        {
       		 if(i==0)
       		 printf("%d",seq[i]);
        	else
        	printf(" %d",seq[i]);
        }
        printf("\n");
}
int add_seq(int sum_seq[], int add_seq[], int size)
{
    int i;
    for(i=0;i<size;i++)
      sum_seq[i]+=add_seq[i];
}
int main()
{
    int  odd_seq[MAX_SIZE],  odd_size;
    int even_seq[MAX_SIZE], even_size;
    int m, i, put_size;

    scanf("%d", &m);
    init_seq(odd_seq, MAX_SIZE);
    odd_size = get_seq(odd_seq);
    for(i = 2; i <= m; i++)
    {
        if(i % 2 == 0)
        {
            init_seq(even_seq, MAX_SIZE);
            even_size = get_seq(even_seq);
            put_size = max(odd_size, even_size);
            add_seq(odd_seq, even_seq, put_size);
            put_seq(odd_seq, put_size);
        }
        else
        {
            init_seq(odd_seq, MAX_SIZE);
            odd_size = get_seq(odd_seq);
            put_size = max(odd_size, even_size);
            add_seq(even_seq, odd_seq, put_size);
            put_seq(even_seq, put_size);
        }
    }
    if(m % 2 == 0)
        put_seq(even_seq, even_size);
    else
        put_seq(odd_seq, odd_size);
    return 0;
}

presentition error:
put_seq 裡邊兒不用考慮size==0,的情況,因為for迴圈之後有一個printf("\n"),是無條件輸出的,包括了=0的情況

wrong anser:
這裡一開始我用了memset(seq,0,size);輸出對,但交不上去不知道為什麼。