在C中添加来自一个数组的前2个元素和来自另一个数组的前2个元素

时间:2015-11-18 17:51:01

标签: c arrays

我试图通过添加第一个数组中的2个第一个元素和第二个数组中的2个第一个元素来创建第三个数字数组,依此类推。 示例:v1 { 1 2 3 4 } v2 { 5 6 7 8 } 和v3应为{ 1 2 5 6 3 4 7 8 }

到目前为止我所做的一切:

提前致谢!

int *v1,*v2,*v3,n,m,i,j;
scanf("%d",&n);
m=n;
v1=(int*)malloc(n*sizeof(int));
v2=(int*)malloc(m*sizeof(int));
v3=(int*)malloc(n*m*sizeof(int));

for(i=0;i<n;i++)
    scanf("%d",&v1[i]);
for(j=0;j<m;j++)
    scanf("%d",&v2[j]);

for(i=0;i<2;i++)
    v3[i]=v1[i];
for(i=0;i<2;i++)
    v3[2+i]=v2[i];
printf("sir concatenat =\n");
for(i=0;i<4;i++)
    printf("v3[%d]= %d\n",i,v3[i]);

1 个答案:

答案 0 :(得分:1)

我尽量做出尽可能少的修改。我希望这可以帮到你。

第一个错误是分配得到的整数数组。必须是:

v3 = (int*)malloc((n + m)*sizeof(int));

第二个问题是如何合并两个输入数组以获得最终结果。 这意味着您必须首先检查输入数组是偶数还是奇数:

j = ((m % 2) != 0) ? 1 : 0;

然后在步骤为2的情况下循环每个输入数组,您可以以与您的方法非常相似的方式一个接一个地合并两个输入数组:

for (k = 0; k < m; k += 2) {
    for (i = k; i < (k + 2) && i < m; i++) {
        v3[k + i] = v1[i];
    }
    if (i >= m && j == 1) {
        v3[m + m - 1] = v2[m - 1];
    } else {
        for (i = k; i < (k + 2) && i < m; i++) {
            v3[k + i + 2] = v2[i];
        }
    }
}

以下是完整的代码:

#include <stdio.h>


void main()
{
    int *v1, *v2, *v3, n, m, i, j, k;
    scanf("%d", &n);
    m = n;
    v1 = (int*)malloc(n*sizeof(int));
    v2 = (int*)malloc(m*sizeof(int));
    v3 = (int*)malloc((n + m)*sizeof(int));

    for (i = 0; i<n; i++)
        scanf("%d", &v1[i]);
    for (j = 0; j<m; j++)
        scanf("%d", &v2[j]);

    j = ((m % 2) != 0) ? 1 : 0;
    for (k = 0; k < m; k += 2) {
        for (i = k; i < (k + 2) && i < m; i++) {
            v3[k + i] = v1[i];
        }
        if (i >= m && j == 1) {
            v3[m + m - 1] = v2[m - 1];
        } else {
            for (i = k; i < (k + 2) && i < m; i++) {
                v3[k + i + 2] = v2[i];
            }
        }
    }
    printf("sir concatenat =\n");
    for (i = 0; i < (2 * m); i++)
        printf("v3[%d]= %d\n", i, v3[i]);
}