C++ 程式碼,用於找出卡牌分發方法,使每位玩家的所有和相等


假設我們有一個包含 n 個元素的陣列 A。其中 n 為偶數。A[i] 是寫在第 i 張卡上的數字。有 n/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]

範例

我們來看一下以下實現,以便更好地理解 −

#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),

更新於:2022-03-15

114 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.