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

各プレーヤーのすべての合計を等しくするためのカードスプレッド方法を見つけるためのC++コード


n個の要素を持つ配列Aがあるとします。ここでnは偶数です。 A[i]はithcardに書かれた数字です。ゲームをしたい人はn/2人います。最初に、各プレイヤーは2枚のカードを取ります。カードに書かれている値の合計が各プレイヤーで同じになるようにカードを配布する方法を見つける必要があります。

したがって、入力がA =[1、5、7、4、4、3]の場合、出力は[(0、2)、(5、1)、(3、4)]になります。これは、A [ 0] + A [2] =8、A [5] + A [1]=8およびA[3]+ A[4]=8。

ステップ

これを解決するには、次の手順に従います-

n := size of A
Define one array of pairs p of size n
for initialize i := 0, when i < n, update (increase i by 1), do:
   first element of p[i] := A[i]
   second element of p[i]:= i
sort the array p, p + n
for initialize i := 0, when i < n / 2, update (increase i by 1), do:
   print second element of p[i] and second element of p[n - i - 1]
の2番目の要素

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A){
   int n = A.size();
   pair<int, int> p[n];
   for (int i = 0; i < n; i++){
      p[i].first = A[i];
      p[i].second = i;
   }
   sort(p, p + n);
   for (int i = 0; i < n / 2; i++)
      cout << "(" << p[i].second << ", " << p[n - i - 1].second <<"), ";
   }  
   int main(){
      vector<int> A = { 1, 5, 7, 4, 4, 3 };
      solve(A);
   }

入力

{ 1, 5, 7, 4, 4, 3 }

出力

(0, 2), (5, 1), (3, 4),

  1. C++で特定の二分木にあるすべての右葉の合計を求めます

    この問題では、二分木が与えられます。私たちの仕事は、与えられた二分木の左右すべての合計を見つけることです 。 問題を理解するために例を見てみましょう 入力: 出力:8 説明 − All leaf nodes of the tree are : 1, 8 Sum = 1 + 8 = 9 ソリューションアプローチ この問題の簡単な解決策は、ツリーをルートからリーフにトラバースすることです。ノードが左リーフノードの場合は、合計に追加します。ツリー全体がトラバースされるとき。合計を印刷します。 例 ソリューションの動作を説明するプログラム #include <iostre

  2. C++で特定の二分木にあるすべての左葉の合計を求めます

    この問題では、二分木が与えられます。私たちのタスクは、特定の二分木に残っているすべての葉の合計を見つけることです 。 問題を理解するために例を見てみましょう 入力: 出力:11 説明 − All leaf nodes of the tree are : 2, 9 Sum = 2 + 9 = 11 ソリューションアプローチ この問題の簡単な解決策は、ツリーをルートからリーフにトラバースすることです。ノードが左リーフノードの場合は、合計に追加します。ツリー全体がトラバースされるとき。合計を印刷します。 例 ソリューションの動作を説明するプログラム #include <i