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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP