在 C++ 中找到一個包含 n 個整數的陣列中,在刪除每個元素後,剩餘的最後一個元素


假定我們有一個包含 1 到 n 的整數的迴圈陣列。找到列表中將保留的最後一個元素,從第一個元素開始每刪除第二個元素後,它將保持在列表中。如果輸入為 5,則陣列將為 [1, 2, 3, 4, 5]。從 1 開始。在刪除每個第二個元素後,將如下 −

1 0 3 4 5
1 0 3 0 5
0 0 3 0 5
0 0 3 0 0

因此,在列表中保留的元素為 3。

我們將使用遞迴來解決這個問題。假設 n 是偶數。將移除數字 2、4、6,然後我們將從 1 重新開始。因此移除了 n/2 個數字。而且我們開始就好像是從一個僅包含奇數位 1、3、5、…、n/2 的 n/2 陣列中的 1 形式一樣。所以我們可以寫出如下公式 −

solve(n)=2*solve(n/2)-1[when n is even]
solve(n)=2*solve(n-1/2)+1[when n is odd]

基本條件是 solve(1) = 1。

#include<iostream>
using namespace std;
int deleteSecondElement(int n) {
   if (n == 1)
      return 1;
   if (n % 2 == 0)
      return 2 * deleteSecondElement(n / 2) - 1;
   else
      return 2 * deleteSecondElement(((n - 1) / 2)) + 1;
}
int main() {
   int n = 5;
   cout << "Remaining Element: " << deleteSecondElement(n) << endl;
   n = 10;
   cout << "Remaining Element: " << deleteSecondElement(n) << endl;
}

輸出

Remaining Element: 3
Remaining Element: 5

更新於: 01-11-2019

398 次檢視

開啟你的 職業生涯

完成課程,獲得認證

開始學習
廣告