使用 C++ 查詢僅由奇數數字組成的第 N 個數


C++ 擁有大量的函式來解決數學問題。其中一個數學函式是使用程式碼查詢第 N 個奇數位數。本文將描述查詢第 N 個奇數的完整方法,並瞭解什麼是奇數以及哪些數是由奇數位陣列成的。

查詢僅由奇數數字組成的第 N 個數

奇數除以二餘一,所以前幾個奇數是 1, 3, 5, 7, 9, 11, 13, 15, 17, 19...

為了找到所需的數字,我們這裡有兩種方法:

方法一:檢查每個自然數是否為奇數,並對每個奇數進行計數,直到計數等於 n,如果找到偶數則不計數,即跳過偶數並計數奇數,給出找到的所需的第 N 個數。

這種查詢僅由奇數數字組成的第 N 個數的方法很簡單,我們只是檢查每個數字並計算奇數的個數,但在計算機程式設計方面,這種方法需要花費大量時間才能完成此任務。

方法二:每個由奇數數字組成的數字最後一位可以是 1、3、5、7、9,所以它們都是奇數。因此,我們首先檢查第 N 個數字是否為 1、3、5、7、9,如果是,則我們得到答案;否則,我們移動到其他可能的數字,例如 11、13、15、17、19,然後是 21、23、25、27、29。這形成了一個模式 1 * 10 + {最後可能的數字}。

示例

Last possible numbers are 1,3,5,7,9
Next possible numbers can be found by
1 * 10 + 1 =11
1 * 10 + 3 = 13
1 * 10 + 5 = 15
1 * 10 + 7 = 17
1* 10 + 9 = 19
i.e 11,13,15,17,19

示例程式碼

首先,讓我們看看程式碼是什麼樣的:

#include<bits/stdc++.h>
using namespace std;
int main(){
    queue<int> q;
    int cnt = 0, ans = 0;
    int n;
    cin >> n;
    int a[5]={1,3,5,7,9};
    for(int i = 0; i < 5;i++){
        cnt++;
        if(cnt == n)
            ans = a[i];
        q.push(a[i]);
    }
    if(ans)
        cout << ans << "\n";
    else{
        while(true){
            int x = q.front();
            q.pop();
            for(int j = 0; j < 5; j++) {
                int temp = x * 10 + a[j];
                q.push(temp);
                cnt++;
                if(cnt == n)
                    ans = temp;
            }
            if(ans)
                break;
        }
        cout << ans << "\n";
    }
    return 0;
}

輸出

9

(當我們提供 5 作為輸入時,我們得到 9 作為輸出)

上面的程式碼是 C++ 程式碼,用於查詢僅由奇數數字組成的第 N 個數。為了理解這段程式碼,讓我們分解這段程式碼並理解它的每一部分,從而理解完整的程式碼。

程式碼解釋

步驟 1:從使用者處獲取 n 並初始化所需的變數。

int main() {
   queue<int> q;
   int cnt = 0, ans = 0;
   int n;
   cin >> n;
   int a[5]={1,3,5,7,9};

這裡我們建立一個佇列並初始化變數 cnt 用於計數,ans 用於儲存答案。此外,我們使用 cin 從使用者處獲取輸入,並使用第一個可能的數字初始化一個數組。

步驟 2:檢查第 N 個數字是否在初始可能的數字中,並將這些數字儲存在佇列中。

for(int i = 0; i < 5;i++){
   cnt++;
   if(cnt == n)
      ans = a[i];
      q.push(a[i]);
   }
   if(ans)
      cout << ans << "\n";

在上面的程式碼中,我們正在檢查第 N 個數字是否在儲存在陣列中的第一個可能的數字中,並將陣列中存在的數字推入佇列,如果在第一個可能的數字中找到第 N 個數字,則給出輸出。

步驟 3:在接下來的可能的數字中查詢第 N 個數字,如果找不到第 N 個數字,則更改佇列中的數字。

while(true) {
   int x = q.front();
   q.pop();
   for(int j = 0; j < 5; j++) {
      int temp = x * 10 + a[j];
      q.push(temp);
      cnt++;
      if(cnt == n)
         ans = temp;
      }
      if(ans)
         break;
   }
   cout << ans << "\n";
}

最後,我們從佇列中彈出每個數字,並使用公式 {x * 10 + 最後一個奇數} 從中生成下一個可能的數字,並檢查 cnt 的值是否等於 n。

結論

在本文中,我們有一個問題:如何找到僅由奇數數字組成的第 N 個奇數,我們找到了兩種方法來做到這一點。第一種方法很容易理解,因為它只是檢查每個數字並跳過偶數,但它在計算上花費了時間。

第二種方法是使用佇列並將奇數儲存在其中,並使用我們上面看到的公式找到下一個可能的數字。這種方法的複雜度為 O(n)。

我們在 C++ 中編寫了一個程式來查詢僅由奇數數字組成的第 N 個數;我們可以在其他任何語言(如 C、python、java 或任何其他程式語言)中編寫此程式。希望您覺得這篇文章有所幫助,因為它提供瞭解決問題的完整方法知識。

更新於:2021 年 11 月 23 日

488 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.