Problem A: 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 <stdlib.h>
int main()
{
int i = 0, m = 0, k, a[100][1000] = { 0 }, b[100][1000] = { 0 }, d[1000] = { 0 }, max[1000], n;
while (scanf("%d", &n) != EOF)
{
for (k = 0; k < n; k++)
{
scanf("%d", &a[i][k]);\第一个方括号表示第几个数组,第二个表示这个数组中的项数。
d[i]++;\统计这个数组中的项数。
}
i++;
m++;\统计数组数量。
if(m%2==0)
{
for (i = 0; i < m; i+=2)
{
if (d[i] > d[i + 1])
{
max[i] = d[i];
}
else
{
max[i] = d[i + 1];
}
}\比较得出两组数组中项数较多的一项。
for (i = 0; i < m; i+=2)
{
for (k = 0; k < max[i]; k++)
{
b[i][k] = a[i][k] + a[i + 1][k];\用另一个数组来得出两个连续数组的和。
}
}
for (i = m-2; i < m; i+=2)
{
for (k = 0; k < max[i]; k++)
{
if (k != max[i]-1)
printf("%d “, b[i][k]);
else
printf(”%d", b[i][k]);
}
printf("\n");
}
}
}
if(m%2!=0)
{
for (k = 0; k < n; k++)
{
if (k != n-1)
printf("%d “, a[m-1][k]);
else
printf(”%d", a[m-1][k]);
}
printf("\n");
}\如果输入为奇数项单独输出最后最后一个数组中的所有元素。
return 0;
}
/**************************************************************
Problem: 1050
User: 202001061214
Language: C
Result: Accepted
Time:52 ms
Memory:1464 kb
****************************************************************/
思路是自己的,但刚写出来时还是很多次不对,后在同学和朋友的指导下终于完成了,算是一个较小众但直观的做法,也希望能帮到大家。