Problem D: Sequence Problem (III) : Array Practice
题目描述:
解题思路:
依然要注意奇偶情况以及最后一次的情况。
与前两题不同,这一个题是每一次输出的数组规则是:
对输入的整数序列两两相加:第1行和第2行相加、第2行和第3行相加……按顺序输出结果:每行输出一个整数序列,每两个整数之间用一个空格分隔。若最后序列不足两个,则视作补一个长度为0的整数序列相加。
值得注意的是一个长度为0的整数序列也应该有输出,即使没有整数输出,也应该占有一行,因为“每行输出一个整数序列”。
给出代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a[2100],b[2100];
int m,n,i,j,k,x1=0,x2=0,h;
scanf("%d",&k);
int count1=1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
while(count1<=k){
if(count1==1&&k==1)
{
scanf("%d",&j);
if(j==0)
{
printf("\n");
}
else
{
for(i=1;i<=j;i++)
{
scanf("%d",&a[i]);
}
x1=i-1;
for(i=1;i<=x1;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
printf("\n");
}
break;
}
if(count1==1)
{
scanf("%d",&h);
if(h==0)
{
x1=0;
}
else
{
for(i=1;i<=h;i++)
{
scanf("%d",&a[i]);
}
x1=i-1;
}
count1++;
}
if(count1!=1&&count1%2!=0&&count1<=k)
{ scanf("%d",&h);
if(h==0)
{
x1=0;
}
else
{
for(i=1;i<=h;i++)
{
scanf("%d",&a[i]);
}
x1=i-1;
}
if(x1==0&&x2==0)
printf("\n");
else
{
if(x1>x2)
{
for(i=1;i<=x1;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
}
else
{
for(i=1;i<=x2;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
}
printf("\n");
}
x2=0;
memset(b,0,sizeof(b));
if(count1==k)
{
if(x1==0)
printf("\n");
else
{
for(i=1;i<=x1;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
printf("\n");
}
}
count1++;
}
if(count1%2==0&&count1<=k)
{ scanf("%d",&h);
if(h==0)
x2=0;
else
{
for(i=1;i<=h;i++)
{
scanf("%d",&b[i]);
}
x2=i-1;
}
if(x1==0&&x2==0)
printf("\n");
else
{
if(x1>x2)
{
for(i=1;i<=x1;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
}
else
{
for(i=1;i<=x2;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
}
printf("\n");
}
x1=0;
memset(a,0,sizeof(a));
if(count1==k)
{
if(x2==0)
printf("\n");
else
{
for(i=1;i<=x2;i++)
{
if(i==1)
printf("%d",a[i]+b[i]);
else
printf(" %d",a[i]+b[i]);
}
printf("\n");
}
}
count1++;
}
}
return 0;
}