1. 程式人生 > >科大oj Problem B: Sequence Problem : Array Practice

科大oj Problem B: Sequence Problem : Array Practice

Problem B: 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 a[1001]={0},b[1001]={0},c[1001]={0}; int n, i, j, l, m, number = 0; while(scanf("%d", &n)!=EOF) { number++; if(number % 2!= 0) \奇陣列存到a裡面 { for(i = 0; i < n; i++) scanf("%d",&a[i]); } else \偶陣列存到b裡面 { for(j = 0; j < n; j++) scanf("%d",&b[j]); } if(number % 2 == 0) \有兩個陣列後就相加 { if(i>j) { for(m = 0; m < i; m++) { c[m] = a[m] + b[m]; } for(m = 0; m < i; m++) { if(m==0) printf("%d",c[0]); else printf(" %d",c[m]); } printf("\n"); for(l = 0; l < 1001; l++) { a[l] = 0; b[l] = 0; c[l] = 0; } } else { for(m = 0; m < j; m++) { c[m] = a[m] + b[m]; } for(m = 0; m < j; m++) { if(m == 0) printf("%d",c[0]); else printf(" %d",c[m]); } printf("\n"); for(l = 0; l < 1001; l++) { a[l] = 0; b[l] = 0; c[l] = 0; } } } } if(number % 2 == 1) \對於最後的單獨討論 { if(n != 0) { for(m = 0; m < i; m++) { if(m == 0) printf("%d",a[m]); else printf(" %d",a[m]); } } printf("\n"); if(n == 0) printf("\n"); }

}

注意 1、陣列用完要清零,可以用memset,效率比較高 2、對於最後一組,一定要進行討論 3、對於0陣列要單獨列出