与えられた式の結果が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
-
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
-
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