Problem A: Sequence Problem : Array Practice
Time Limit: 1 Sec Memory Limit: 4 MBSubmit: 11931 Solved: 4189
[ Submit][ Status][ Web Board]
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
5 10 15 20 30 50
4 100 200 300 400
Sample Output
11 17 23 30 50
100 200 300 400
100 200 300 400
#include <stdio.h>
#include <stdlib.h>
int get_array(int a[], int N)
{
int i;
for(i = 0; i < N; i++)
scanf("%d", &a[i]);
return 0;
}
int samelength(int a[], int n, int m)
{
int i;
for(i = n; i < m; i++)
a[i] = 0;
return 0;
}
int main()
{
int A, B, a[1000], b[1000];
int i;
while(scanf("%d", &A) != EOF)
{
//int a[A];
get_array(a, A);
if(scanf("%d", &B) == EOF)
{
for(i = 0; i < A; i++)
{
printf("%d", a[i]);
if(i != A - 1)
printf(" ");
}printf("\n");
break;
}
else
{
int maxL;
get_array(b, B);
if(A >= B)
{maxL = A; samelength(b, B, A);}
else
{maxL = B; samelength(a, A, B);}
for(i = 0; i < maxL; i++)
{
printf("%d", a[i] + b[i]);
if(i != maxL - 1)
printf(" ");
}printf("\n");
}
}
return 0;
}
Sample Input
3
1 2 3 0
10 15 20 30 50 0
100 200 300 400 0
10 15 20 30 50 0
100 200 300 400 0
Sample Output
11 17 23 30 50
100 200 300 400
100 200 300 400
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_array(int a[])
{
int i;
for(i = 0; ; i++)
{
scanf("%d", &a[i]);
if(a[i] == 0)
break;
}
return i;
}
int samelength(int a[], int n, int m)
{
int i;
for(i = n; i < m; i++)
a[i] = 0;
return 0;
}
int main()
{
int N, a[1001], b[1001], A, B, max; // 以‘ 0 ’结尾的边界问题
int i, j;
scanf("%d", &N);
for(i = 0; i < N / 2; i++)
{
A = get_array(a);
B = get_array(b);
if(A >= B)
{
max = A;
samelength(b, B, A);
}
else
{
max = B;
samelength(a, A, B);
}
for(j = 0; j < max; j++)
{
printf("%d", a[j] + b[j]);
if(j != max - 1)
printf(" ");
}printf("\n");
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
}
if(N % 2 != 0)
{
A = get_array(a);
for(i = 0; i < A; i++)
{
printf("%d", a[i]);
if(i != A - 1)
printf(" ");
}printf("\n");
}
return 0;
}
Sample Input
3
3 1 2 3
5 10 15 20 30 50
4 100 200 300 400
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
110 215 320 430 50
100 200 300 400
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_array(int a[])
{
int i, N;
scanf("%d", &N);
for(i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
return N;
}
int samelength(int a[], int n, int m)
{
int i;
for(i = n; i < m; i++)
a[i] = 0;
return 0;
}
int main()
{
int N, a[1005], b[1005], A, B, max;
int i, j;
scanf("%d", &N);
if(N != 0)
{
A = get_array(a);
for(i = 1; i < N; i++)
{
/*for(i = 0; i < A; i++)
{
printf("%d", a[i]);
if(i != A - 1)
printf(" ");
}printf("\n");*/
B = get_array(b);
if(A >= B)
{
max = A;
samelength(b, B, A);
}
else
{
max = B;
samelength(a, A, B);
}
for(j = 0; j < max; j++)
{
printf("%d", a[j] + b[j]);
if(j != max - 1)
printf(" ");
}printf("\n");
A = B;
for(j = 0; j < A; j++) // 让a[] = b[],再重新输个b[]就行了
a[j] = b[j];
}
for(i = 0; i < A; i++)
{
printf("%d", a[i]);
if(i != A - 1)
printf(" ");
}printf("\n");
}
return 0;
}