Как переключить две цифры в массиве только с одной цифрой? - PullRequest
1 голос
/ 15 мая 2019

Как это сделать:

массив 1: 2 8 5 7 3 5
массив 2: 2018 5 7 3 5

Проблема говорит о том, что если два четных числа являются последовательными в первом массиве, поместите 2018 на их место, вот так. Как я могу это сделать?

for(a=n-1; a>=0; a--)
{
    if( b[a]%2==0 && b[a-1]%2==0)
    {
        for(c=a-1; c<n-1; c++)
        {
            b[c]=b[c+1];
        }
        b[a]= 2017;
    }

}

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы не можете реально изменить размер массива, но вы можете сместить элементы и игнорировать элементы в конце:

#include <stdio.h>

void shift_left(int* arr, size_t sz, size_t shift_cnt)
{
  for (size_t i = 0; i != sz - shift_cnt; ++i)
  {
    arr[i] = arr[i + shift_cnt];
  }
  for (size_t i = sz - shift_cnt; i != sz; ++i)
  {
    arr[i] = 0;
  }
}

int main()
{
  int arr[] = { 2, 8, 5, 7, 3, 5 };
  size_t sz = sizeof(arr) / sizeof(arr[0]);

  for (size_t i = 0; i < sz - 1;)
  {
    if (arr[i] % 2 == 0 && arr[i + 1] % 2 == 0)
    {
      shift_left(arr + i, sz-- - i, 1);
      arr[i] = 2018;
    }
    else
    {
      ++i;
    }
  }

  for (size_t i = 0; i != sz; ++i)
    printf("%d ", arr[i]);

  return 0;
}

// Output: 2018 5 7 3 5
0 голосов
/ 15 мая 2019

Маршируйте исходный массив в поисках четных пар

// return size used

size_t AJ_squish(int *dest, size_t dest_size, const int *src, size_t src_size) {
  size_t dest_len = 0;
  while (src_size > 1 && dest_len < dest_size) {
    // 2 evens in a row?
    if (src[0] % 2 == 0 && src[1] % 2 == 0) {
      dest[dest_len++] = 2018;
      src_size -= 2;
    } else {
      dest[dest_len++] = *src++;
      src_size--;
    }
  }
  if (src_size >  0 && dest_len < dest_size) {
    dest[dest_len++] = *src;
  }
  return dest_len;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...