重新排列前 N 个数字,使它们在 C++ 中的距离为 K
我们给定了整数变量,比方说,N 和 K。任务是首先计算 N 的排列,然后重新排列排列,使其与每个元素的距离为 K。
让我们看看这个的各种输入输出场景 -
输入 - int n = 20, int k = 2
输出 - 在 K 距离处重新排列前 N 个数字是:3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18。
说明 - 给定整数变量“N”,即 20 和“K”,即 2。现在我们将计算“N”的排列,即 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18. 19, 20. 现在,我们将排列元素,使所有元素与每个元素的距离为 'k'。
输入 - int n = 10, int k = 3
输出 - 重新排列前 N 个数字以使其在 K 距离处是:不可能
说明- 给定整数变量“N”即 10 和“K”即 3。现在我们将计算“N”的排列,即 1、2、3、4、5、6、7、8、9、10。现在,我们将以这样一种方式排列元素,即所有元素都与每个元素相距 'k' 距离,但对于给定的输入值,这是不可能的。
下面程序中使用的方法如下
输入一个整数类型的元素,即'N' 和'K'。
Rearrangement(int n, int k)通过将 N 和 K 作为参数传递给函数来调用函数。
函数内部 Rearrangement(int n, int k)
将整数变量声明为 temp 并使用 n % (2 * k) 对其进行设置。
将整数类型数组声明为大小为 n + 1 的 ptr,即 prt[n+1]。
检查 IF k = 0 然后开始循环 FOR 从 i 到 1 直到 i 小于 size 并将 i 增加 1 并打印 i。
检查 IF temp 不等于 0 然后打印 NOT POSSIBLE。
从 i 到 1 开始循环 FOR 直到 i 小于 N 并将 ptr[i] 设置为 i。
从 i 到 1 开始循环 FOR,直到 i 小于 n 并用 i + 2 * k 设置 i。在循环内,从 j 到 1 开始另一个循环 FOR,直到 j 小于 k 并将 j 增加 1。在循环内,通过传递 ptr[i + j -1] 和 ptr[k + i + j 调用 swa 方法- 1] 作为参数。
开始循环 FOR 从 i 到 1 tll i 小于 N 并将 i 增加 1。
打印 prt[i]。
打印结果。
示例
#include <bits/stdc++.h>输出结果using namespace std;
void Rearrangement(int n, int k){
int temp = n % (2 * k);
int ptr[n + 1];
if(k == 0){
for(int i = 1; i <= n; i++){
cout << i << " ";
}
return;
}
if(temp != 0){
cout<<"Not Possible";
return;
}
for(int i = 1; i <= n; i++){
ptr[i] = i;
}
for(int i = 1; i <= n; i += 2 * k){
for(int j = 1; j <= k; j++){
swap(ptr[i + j - 1], ptr[k + i + j - 1]);
}
}
for(int i = 1; i <= n; i++){
cout << ptr[i] << " ";
}
}
int main(){
int n = 20;
int k = 2;
cout<<"使它们在 K 距离处的前 N 个数字的重新排列是: ";
Rearrangement(n, k);
return 0;
}
如果我们运行上面的代码,它将生成以下输出
使它们在 K 距离处的前 N 个数字的重新排列是: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18
以上是 重新排列前 N 个数字,使它们在 C++ 中的距离为 K 的全部内容, 来源链接: utcz.com/z/331644.html