使用 C++ 找出仅由奇数组成的第 N 个数字

C++ 有大量的函数来解决数学问题。数学函数之一是使用代码找到第 N 个奇数。本文将介绍求第N个奇数的完整方法,了解奇数是什么,奇数是由什么组成的。

找到仅由奇数组成的第 N 个数字

奇数除以二得到余数,所以前几个奇数是 1,3,5,7,9,11,13,15,17,19...

要找到所需的数字,我们在这里有两种方法 -

方法1 - 检查每个自然数,它是否是奇数并对每个奇数进行计数,直到计数等于n,如果找到偶数则不计数,即跳过偶数并计算奇数并给出找到的所需的第 N 个数字。

这种找到由奇数组成的第 N 个数字的方法可能很简单,因为我们只是检查每个数字并计算奇数,但在计算机编程方面,这种方法需要很多时间才能完成这项任务。

方法 2 - 每个由奇数组成的数字最后可以有 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 作为输出)

上面的代码是用于查找仅由奇数位组成的第 N 个数字的 C++ 代码。要理解这段代码,让我们分解这段代码,了解它的每一部分,从而理解完整的代码。

代码说明

步骤 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 或任何其他编程语言)来执行此程序。希望这篇文章对您有所帮助,因为它提供了解决问题的方法的完整知识。

以上是 使用 C++ 找出仅由奇数组成的第 N 个数字 的全部内容, 来源链接: utcz.com/z/355057.html

回到顶部