首页  >  文章  >  后端开发  >  在 C++ 中重新排列前 N 个数字,使它们处于 K 距离

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

王林
王林转载
2023-09-11 15:13:101005浏览

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

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

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

输入- int n = 20, int k = 2

输出

strong>− 重新排列前 N 个数字,使其处于 K 距离处:3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18。

解释

说明 strong>− 我们给出整数变量 '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

输入− int n = 10, int k = 3

输入p>

输出- 重新排列前 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 + 的 ptr 1 即 prt[n+1]。

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

    • 检查 IF temp 不等于 0,然后打印 NOT POSSIBLE。

    • 开始从 i 到 1 的 FOR 循环,直到 i 小于

    • 开始从 i 到 1 的 FOR 循环,直到 i 小于 n,并将 i 设置为 i + 2 * k。在循环内部,启动另一个循环 FOR 从 j 到 1,直到 j 小于 k 并将 j 加 1。在循环内部,通过传递 ptr[i + j -1] 和 ptr[k + i + j 调用 swa 方法- 1] 作为参数。

    • 开始从 i 到 1 的 FOR 循环,直到 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<<"Rearrangement of first N numbers to make them at K distance is: ";
       Rearrangement(n, k);
       return 0;
    }

    输出

    如果我们运行上面的代码,它将生成以下输出

    Rearrangement of first N numbers to make them at K distance is: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18

    以上是在 C++ 中重新排列前 N 个数字,使它们处于 K 距离的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明:
    本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除