Как вставить массив в указанной пользователем позиции в другом массиве и получить результирующий массив? - PullRequest
0 голосов
/ 31 августа 2018

Проблема возникает при смещении результирующего массива вправо после вставки второго массива в указанной позиции. Обратите внимание, что вращение, круговое или обратное движение не требуется.

#include <stdio.h>

void main() {
    int i, n, m, location, b[20], a[20];
    printf("Enter the number of elements in first array:\n");
    scanf("%d", &m);
    printf("Enter the elements of first array : \n");
    for (i = 0; i < m; i++) {
        scanf("%d", &a[i]);
    }

    printf("Enter the location to insert second array : \n");
    scanf("%d", &location);
    printf("Enter the number of elements in second array :\n");
    scanf("%d", &n);
    printf("Enter the elements of second array : \n");
    for (i = 0; i < n; i++) {
        scanf("%d", &b[i]);
    }

    for (i = m; i >= location; i--) {
        a[i + n] = a[i];
    }
    a[location + i] = b[i];
    m++;  

    printf("Resulting array after insertion is : \n");
    for (i = 0; i < m; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
}

После запуска программы. Я понял, что это неправильно.

Enter the number of elements in first array:
3

Enter the elements of first array : 
10 20 30

Enter the location to insert second array : 
1

Enter the number of elements in second array :
2

Enter the elements of second array : 
55 66

Resulting array after insertion is : 
10 55 30 20 

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Вам лучше создать новый массив c [40]

for(i=0;i<n+m;i++){
    //keep first part of b
    if (i<location){
        c[i]=b[i]
    }
    //insert a
    if (i>=location&&i<location+m){
        c[i]=a[i-location]
    }
    //rest part of b
    if (i>=location+m){
        c[i]=b[i-m]
    }
}
0 голосов
/ 31 августа 2018
  1. После перемещения элементов массива a из location в экстент длины массива b (что вы делаете правильно), вы также необходимо скопировать каждый элемент массива b в массив a из location и далее (что вы не делаете).

  2. После этого вы должны напечатать массив a, размер которого теперь увеличивается на размер массива b

0 голосов
/ 31 августа 2018

Вы просто добавляете один элемент из b к a

Замените свой

 a[location+i] = b[i];
  m++;   

С

 for(i=0;i<n;i++)
  {
     a[location+i] = b[i];
  }

  m+=n;

Потому что вам нужно перебрать массив b, чтобы добавить все элементы в массив a.

...