ホームページ  >  記事  >  バックエンド開発  >  C++ で最初の N 個の数値を K 個の距離だけ離れるように並べ替えます。

C++ で最初の N 個の数値を K 個の距離だけ離れるように並べ替えます。

王林
王林転載
2023-09-11 15:13:10947ブラウズ

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

整数変数、たとえば N と K を与えます。タスクは、まず N の順列を計算し、次に各要素から距離 K になるように順列を再配置することです。

さまざまな入出力シナリオを見てみましょう -

input- int n = 20, int k = 2

output

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>

出力 - K 距離になるように最初の N 数値を並べ替えます: 不可能です

説明 - を与えます。整数変数「N」は 10、「K」は 3 です。次に、「N」、つまり 1、2、3、4、5、6、7、8、9、10 の順列を計算します。ここで、すべての要素が各要素から「k」距離離れて配置されるように要素を配置しますが、指定された入力値ではそれは不可能です。

次のプログラムで使用するメソッドは次のとおりです。

  • 整数型の要素、つまり 'N' と 'K' を入力します。

  • N と K を関数にパラメータとして渡して、関数 Rearrangement(int n, int k) を呼び出します。

  • 内部関数 Rearrangement(int n, int k)

    • 整数変数を temp として宣言し、それを n % (2 * k) に設定します)。

    • 整数配列をサイズ n の ptr 1、つまり prt[n 1] として宣言します。

    • IF k = 0 を確認し、i が size 未満になるまで i から 1 まで FOR のループを開始し、i を 1 増やして i を出力します。

    • IF temp が 0 に等しくないことを確認し、NOT POSSIBLE を出力します。

    • i が未満になるまで i から 1 まで FOR ループを開始します。

    • i が未満になるまで i から 1 まで FOR ループを開始しますn を設定し、i を i 2 * k に設定します。ループ内で、j が k 未満になるまで j から 1 への別のループ FOR を開始し、j を 1 ずつインクリメントします。ループ内では、ptr[i j -1] と ptr[ki j - 1] を引数として渡すことによって swa メソッドが呼び出されます。

    • i が N 未満になるまで i から 1 まで FOR ループを開始し、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 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。