在 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
廣告