首页 文章资讯内容详情

重新排列前 N 个数字,使它们在 C++ 中的距离为 K

2026-06-02 1 花语

我们给定了整数变量,比方说,N和K。任务是首先计算N的排列,然后重新排列排列,使其与每个元素的距离为K。

让我们看看这个的各种输入输出场景-

输入 -intn=20,intk=2

输出 -在K距离处重新排列前N个数字是:3412785611129101516131419201718。

说明 -给定整数变量“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。

输入 -intn=10,intk=3

输出 -重新排列前N个数字以使其在K距离处是:不可能

说明-给定整数变量“N”即10和“K”即3。现在我们将计算“N”的排列,即1、2、3、4、5、6、7、8、9、10。现在,我们将以这样一种方式排列元素,即所有元素都与每个元素相距k距离,但对于给定的输入值,这是不可能的。

下面程序中使用的方法如下

输入一个整数类型的元素,即N和K。

Rearrangement(intn,intk)通过将N和K作为参数传递给函数来调用函数。

函数内部Rearrangement(intn,intk)

将整数变量声明为temp并使用n%(2*k)对其进行设置。

将整数类型数组声明为大小为n+1的ptr,即prt[n+1]。

检查IFk=0然后开始循环FOR从i到1直到i小于size并将i增加1并打印i。

检查IFtemp不等于0然后打印NOTPOSSIBLE。

从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到1tlli小于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