首页 > 解决方案 > 如何在只有一位数字的数组中切换两位数字?

问题描述

这个怎么做:

数组 1:2 8 5 7 3 5
数组 2:2018 5 7 3 5

问题是如果两个偶数在第一个数组中是连续的,则将 a2018放在它们的位置,就像这样。我怎样才能做到这一点?

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;
    }

}

标签: c

解决方案


你不能真正改变数组的大小,但你可以移动元素并在最后忽略元素:

#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

推荐阅读