重新排列前 N 个数字,使它们在 C++ 中的距离为 K
我们给定了整数变量,比方说,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