整数変数 Number を入力として指定します。 1 から Number までの範囲の要素を含む配列を考えてみましょう。要素の順序は任意です。配列に対して Number-1 の演算を実行すると、演算は次のようになります。
#配列から 2 つの要素 A と B を選択します
from 配列から A と B を削除します。
A と B の 2 乗の合計を配列に追加します。
最終的には次のようになります。単一の整数値。目標は、その要素の可能な最大値を見つけることです。
最終結果を最大化するには、A と B を選択してできるだけ大きくする必要があります。
最大の A と B を見つけるために、優先キューを使用して要素値を格納します。
プライオリティ キューは要素を降順に格納します。
最上位の要素が最大の値を持ち、以下同様となります。したがって、両方の要素をポップした後、それらの四角形を再度キューにプッシュします。
Number-1 を何度もポップして押して、望ましい結果を取得します。
入力 -数値=2
出力 -配列の後の単一要素は削減されます:5
説明 - 優先キューに挿入した後、配列内の要素が [1 2]
であると仮定します: 2 1
A=5、B =4 : A2 B2=1 4=5
最後の要素: 5
入力 -Number=5
出力 - 配列削減後の単一要素: 5
説明 - 配列内の要素が [5 であると仮定します。 1 2 4 3]
優先キューに挿入後: 5 4 3 2 1
A=5, B=4 : A2 B2=25 16=41 : 41 3 2 1
A=41、B=3 : A2 B2=1681 9=1690 : 1690 2 1
A=1690、B=2 : A2 B2=1681 4=2856104 : 2856104 1
A=2856104、B=1 : A2 B 2=1187163712 1=1187163713 : 1187163713
最後の要素: 1187163713
この方法では優先順位を付けます。 キューは配列の要素を降順に格納するように設定されています。最大の 2 つの要素をポップし、値が 1 つだけ残るまでそれらの二乗和をキューに戻します。
#include <bits/stdc++.h> using namespace std; #define lli long long int int reduceArray(int Num){ priority_queue<lli> pQueue; int i=1; while(i<=Num){ pQueue.push(i); i=i+1; } while (pQueue.size() > 1) { lli var1 = pQueue.top(); pQueue.pop(); lli var2 = pQueue.top(); pQueue.pop(); var1=var1*var1; var2=var2*var2; pQueue.push(var1+var2); } return pQueue.top(); } int main(){ int Number = 5; cout<<"Single element after array reduction: "<<reduceArray(Number); return 0; }
Single element after array reduction: 1187163713
以上がC++ で実装された、指定された演算を使用して配列を整数に縮小します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。