C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

最初のN個の数値を再配置して、C++でKの距離に配置します


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

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

入力 − int n =20、int k =2

出力 −最初のN個の数字をK距離に並べ替えると、次のようになります。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」を入力します。

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

  • 関数Rearrangement(int n、int k)の内部

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

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

    • IF k =0を確認してから、ループFORをiから1まで開始し、iがサイズより小さくなるまでiを1ずつインクリメントして、iを出力します。

    • tempが0に等しくないかどうかを確認してから、NOTPOSSIBLEと出力します。

    • ループFORをiから1まで開始し、iがN未満になるまで、ptr[i]をiに設定します。

    • ループFORをiから1まで開始し、iがn未満になるまで、iをi + 2*kに設定します。ループ内で、jからjまでk未満になるまで別のループFORを開始し、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

  1. 最初のn個の自然数の立方和のC++プログラム?

    正の整数1、2、3、4...は自然数として知られています。 このプログラムは、ユーザーから正の整数を受け取り(ユーザーが入力したnを想定)、このプログラムは1 3の値を表示します。 +2 3 +3 3 + .... + n 3 。 Input: n = 3 Output: 36 説明 13+23+33 = 1 +8+27 = 36 このプログラムはuserから正の整数を取り(userがnを入力したと仮定します)、このプログラムは1 3の値を表示します。 +2 3 +3 3 + .... + n 3 。 例 #include <iostream> us

  2. 最初のn個の自然数の二乗和のためのC++プログラム?

    この問題では、最初のn個の自然数の2乗の合計を取得する方法を確認します。ここでは、1からnまで実行されるforループを使用しています。各ステップで、項の2乗を計算し、それを合計に追加します。このプログラムは、完了するまでにO(n)時間かかります。しかし、これをO(1)または一定時間で解きたい場合は、この級数式-を使用できます。 アルゴリズム squareNNatural(n) begin    sum := 0    for i in range 1 to n, do       sum := sum + i^2 &