使用 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 或任何其他编程语言)中编写此程序。希望您觉得这篇文章有所帮助,因为它提供了解决问题的完整方法知识。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP