ホームページ >バックエンド開発 >C++ >ある数値が与えられると、その合計と元の数値の合計は、別の与えられた数値の配列と等しくなります。

ある数値が与えられると、その合計と元の数値の合計は、別の与えられた数値の配列と等しくなります。

王林
王林転載
2023-09-13 15:25:02697ブラウズ

ある数値が与えられると、その合計と元の数値の合計は、別の与えられた数値の配列と等しくなります。

この記事では、数値と順列に関する興味深い質問を詳しく掘り下げます。「ある数値と元の数値の合計は、別の指定された数値の順列に等しい」というものです。この問題は数論と組合せ論を独自に組み合わせたもので、魅力的な課題となっています。

明確にするために、元の数値とターゲット数値が与えられた場合、元の数値とその順列を加算するとターゲット数値が得られるように、元の数値の順列を見つける必要があります。

質問を理解する

本質的に、この質問は、数値の並べ替え、合計、および等価性チェックの概念を組み合わせたものです。課題は、指定された条件を満たす正しい順列 (または数値の並べ替え) を見つけることです。

アルゴリズムの説明

この問題を解決するアルゴリズムは次のとおりです −

  • 元の数値とターゲットの数値の各数値の頻度を数えます。

  • 周波数を比較します。それらが一致する場合、有効な順列があることを意味します。一致しない場合、有効な置換はありません。

###例###

上記のアルゴリズムを使用した C ソリューションは次のとおりです -

リーリー ###出力### リーリー

isPermutation 関数では、最初に 2 つのベクトル countOriginal と countTarget を初期化し、元の数値とターゲット数値の数値の頻度をそれぞれ計算します。次に、元の数値とターゲット数値の各数値を反復処理し、対応するカウントをインクリメントします。最後に、カウントを比較します。一致する場合は true を返し、一致しない場合は false を返します。

main 関数は、元の数値とターゲットの数値を設定し、条件を満たす元の数値の有効な順列があるかどうかを確認します。

テストケースの例

元の数値を 1234 に、ターゲット数値を 2468 に設定しましょう。目標数値と元の数値の差は 1234 です。したがって、1234 自体に等しい順列があるかどうかを確認する必要があります。明らかに、元の数値はそれ自体の順列であるため、出力は「はい、条件を満たす元の数値の順列があります。」

となります。

時間と空間の複雑さ

このアルゴリズムの時間計算量は O(n) です。ここで、n は指定された数値の桁数です。これは、元の数値とターゲット数値の両方のすべての桁を調べているためです。

入力サイズに関係なく、ベクトル countOriginal と countTarget のサイズが定数 (10) であるため、空間計算量は O(1) です。

###結論は###

この記事では、順列、加算、数値的等価性の概念を組み合わせた興味深い問題を検討します。元の数値とターゲット数値の桁数の頻度を利用する C ソリューションを実装しました。

この問題はユニークな挑戦であり、特に数論と組み合わせ論における問題解決スキルを練習するのに最適な方法です。

以上がある数値が与えられると、その合計と元の数値の合計は、別の与えられた数値の配列と等しくなります。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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