C++程式:獲取排列n個自然數後第k個位置的數字


假設我們有兩個數字n和k。我們決定重新排列自然數。但是自然數太多了,所以我們決定從前n個開始。選擇以下數字序列:首先,從1到n的所有奇數(升序排列),然後是從1到n的所有偶數(也升序排列)。我們必須找到哪個數字將位於第k個位置。

問題類別

程式設計中的各種問題可以透過不同的技術解決。要解決問題,我們首先必須設計一個演算法,為此,我們必須詳細研究特定問題。如果同一個問題反覆出現,則可以使用遞迴方法;或者,我們也可以使用迭代結構。if-else和switch case等控制語句可用於控制程式中邏輯的流程。有效地使用變數和資料結構可以提供更簡單的解決方案以及輕量級、低記憶體需求的程式。我們必須檢視現有的程式設計技術,例如分治法、貪心演算法、動態規劃,並找出它們是否可以被使用。這個問題可以透過一些基本的邏輯或暴力方法來解決。請遵循以下內容以更好地理解該方法。

因此,如果我們問題的輸入類似於n = 10;k = 3,則輸出將為5。

步驟

為了解決這個問題,我們將遵循以下步驟:

n := (n + 1) / 2
return (k * 2 - 1) if (k <= n), otherwise (2 * (k - n))

示例

讓我們看看以下實現以更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(int n, int k){
   n = (n + 1) / 2;
   return (k <= n ? k * 2 - 1 : 2 * (k - n));
}
int main(){
   int n = 10;
   int k = 3;
   cout << solve(n, k) << endl;
}

輸入

10, 3

輸出

5

更新於: 2022年4月8日

235次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告