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

与えられた式の結果がC++で正確に2Kになるように、2Nの数の順列を見つけます


2つの整数NとKがあるとします。次の方程式が満たされるように、2N個の自然数の最初の順列を見つける必要があります。

$$ \ displaystyle \ sum \ Limits_ {i =1} ^ N \ lvert A_ {2i-1} -A_ {2i} \ rvert + \ lvert \ displaystyle \ sum \ Limits_ {i =1} ^ N A_ {2i-1 }-A_ {2i} \ rvert =2K $$

Kの値はN以下である必要があります。たとえば、N=4およびK=1の場合、出力は2 1 3 4になります。指定された式の結果は(| 2 – 1 | + | 3 – 4 |)–(| 2 – 1 + 3 – 4 |)=2。

考え方は単純です。1、2、3、4、5、6、…のようなソートされたシーケンスがあると考えてください。 2つのインデックス2i– 1と2iを交換すると、結果は正確に2増加します。このような交換をK回行う必要があります。

#include<iostream>
using namespace std;
void showPermutations(int n, int k) {
   for (int i = 1; i <= n; i++) {
      int a = 2 * i - 1;
      int b = 2 * i;
      if (i <= k)
         cout << b << " " << a << " ";
      else
         cout << a << " " << b << " ";
   }
}
int main() {
   int n = 4, k = 2;
   showPermutations(n, k);
}

出力

2 1 4 3 5 6 7 8

  1. xがC++でyを分割するように、指定された範囲で別個のペア(x​​、y)を見つけます

    ここで、興味深い問題が1つあります。ここで、ペア(x、y)が見つかります。ここで、xとyは範囲内にあるため、l <=x、y <=rであり、ペアには1つのプロパティがあり、xの値はyを除算します。 。利用可能なペアが複数ある場合は、1つだけを選択してください。 下限lと2lの値を取得すれば、O(1)時間でこの問題を解決できます。 y / xの最小値は2である可能性があり、範囲内にさらに大きな値が存在する場合は、2が範囲内になります。また、xを増やすと、2xも増えるため、lと2lは、指定された範囲に入る最小のペアになります。 例 #include<iostream> using na

  2. C++で指定されたインデックスを持つNフィボナッチ数のGCDを検索します

    ここでは、指定されたインデックスを持つn個のフィボナッチ項のGCDを見つける必要があります。したがって、最初に最大インデックスを取得し、フィボナッチ項を生成する必要があります。いくつかのフィボナッチ項は次のようになります:0、1、1、2、3、5、8、13、21、34、…..インデックスは開始です0から。したがって、0 thの要素 インデックスは0です。インデックス{2、3、4、5}でフィボナッチ項のgcdを見つける必要がある場合、項は{1、2、3、4}であるため、これらの数値のGCDは1です。 このタスクを実行するために、1つの興味深いアプローチを使用します。 GCD(Fibo(i)、Fi