問題

如何做到這一點:

陣列1:2 8 5 7 3 5
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 陣列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;
    }

}
 

  最佳答案

您無法真正改變陣列的大小,但您可以移動元素並在最後忽略元素:

 #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
 

  相同標籤的其他問題

c