整数序列是一串按特定顺序排列的整数,整数序列的长度是序列中整数的个数,不可定义长度为负数的整数序列。
两整数序列A、B的和定义为一个新的整数序列C,序列C的长度是A、B两者中较长的一个,序列C的每个位置上的整数都是A、B对应位置之和。若序列A、B不等长,不妨假设A比B整数多,那么序列C中多出B的那部分整数视作A的对应位置上的整数与0相加。
你的任务是计算符合某些要求的整数序列的和,这些序列中的整数都是小于1000的非负整数。
输入为多行,直到文件末尾结束。每行第一个整数为N(N<=1000),后接一个长度为N的整数序列。
对输入的整数序列两两相加:第1行和第2行相加、第3行和第4行相加……按顺序输出结果:每行输出一个整数序列,每两个整数之间用一个空格分隔。若序列数目不为偶数,则视作补一个长度为0的整数序列相加。
值得注意的是一个长度为0的整数序列也应该有输出,即使没有整数输出,也应该占有一行,因为“每行输出一个整数序列”。
这里最少要用到一个数组来存数整数序列或整数序列的和。
思路:
日了狗的数组三连。有多种思路,一个二维数组,两个一维数组,以下是最麻烦的三个数组(一个数组用来储存)但比较好理解。
讨论奇偶数时的输入。每两次赋值输出一次。
注:大坑就是长度为0的数组的情况!codeblocks上完全不好看!最后一次有0数组输出换行是在^z下面有三行空行。没有0数组输出是在^z下面有两行空行。长度为0的坑很容易陷进去。
注:如果不初始化数组 会出现输出乱码的情况。
注:二维数组应该比较简单。思路仅供参考。
代码:
#include <stdio.h> #include <string.h> int main() { int a[1001]={0}; int b[1001]={0}; int c[1001]={0};//初始化数组 int i,j,k=0; int d; int s; while(scanf("%d",&d)!=EOF) { k++; if(k%2!=0)//讨论奇偶数情况的赋值 { for(i=0; i<d; i++) scanf("%d",&a[i]); } else { for(j=0; j<d; j++) scanf("%d",&b[j]); } if(k%2==0)//两次一输出 { if(i>j) { for(s=0; s<i; s++) { c[s]=a[s]+b[s]; } for(s=0; s<i; s++) { if(s==0) printf("%d",c[0]); else printf(" %d",c[s]); } printf("\n"); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c));//输出一次清空一次 } else { for(s=0; s<j; s++) { c[s]=a[s]+b[s]; } for(s=0; s<j; s++) { if(s==0) printf("%d",c[0]); else printf(" %d",c[s]); } printf("\n"); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); } } } if(d!=0&&k%2==1)//讨论奇数次输出 最后一次输出的情况 for(s=0; s<i; s++) { if(s==0) printf("%d",a[s]); else printf(" %d",a[s]); } printf("\n"); if(d==0&&k%2==1) printf("\n"); }