Problem F: 编写函数:数组的操作 之一(Append Code)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1928 Solved: 855
[ Submit][ Status][ Web Board]
Description
给出两个不超过N个元素的数组,将它们元素相加之和放入第三个数组中。
-----------------------------------------------------------------------------
结合“Append Code”中的代码,编写以下函数:
原型:int add_array(int arr[], int a[], int m, int b[], int n);
功能:把a[]的元素和b[]的元素按下标对应相加,放入arr[]里,其中m、n是数组a[]、b[]的长度,a[]或b[]中较长的数组多出来的元素视作加0,返回值是较长的数组的元素个数。
对于这个函数来说,默认m和n都不超过arr[]、a[]、b[]的实际存储空间。
Input
有M(M<50)组测试样例。每组样例包含两个数组,每个数组以一个非负整数N(N<=1000)开始,后接N个整数。
Output
每组测试样例的两个数组对应元素相加,元素多的那个数组视作加0,得到一个新的数组,并输出在一行,元素之间用一个空格分开,行尾不要有多余的空格。
Sample Input
3
5 1 2 3 4 5
4 -1 -2 -3 -4
4 1 2 3 4
5 -1 -2 -3 -4 -5
5 1 2 3 4 5
5 -1 -2 -3 -4 -5
Sample Output
0 0 0 0 5
0 0 0 0 -5
0 0 0 0 0
HINT
这道题对我这种小菜鸡来说有够骚气的。。。在实验的时候完全没转弯直接a[]+b[]了。。。最后伤心的没做出来。。
Append Code
#include<stdio.h>
#include<string.h>
int add_array(int arr[], int a[], int m, int b[], int n)
{
int len;
if(m>n)
len=m;
else
len=n;
for(int i=0;i<len;i++)
{
arr[i]=0;
}
for(int i=0;i<m;i++)
{
arr[i]+=a[i];
}
for(int i=0;i<n;i++)
{
arr[i]+=b[i];
}
return len;
}
int get_array(int a[])
{
int n, i;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
return n;
}
int put_array(int a[], int n)
{
int i;
if(n > 0)
printf("%d", a[0]);
for(i = 1; i < n; i++)
printf(" %d", a[i]);
printf("\n");
return 0;
}
int main()
{
int cases;
int m, n, k,arr[1000], ar[1000], a[1000];
scanf("%d", &cases);
while(cases--)
{
m = get_array(a);
n = get_array(ar);
k = add_array(arr, ar, n, a, m);
put_array(arr, k);
}
return 0;
}