Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để tìm cách trải bài để làm cho tất cả các tổng bằng nhau cho mỗi người chơi

Giả sử chúng ta có một mảng A với n phần tử. Ở đây n là số chẵn. A [i] là một số được viết trên thẻ ithcard. Có n / 2 người muốn chơi một trò chơi. Khi bắt đầu, mỗi người chơi sẽ lấy hai lá bài. Chúng ta phải tìm cách phân phối các quân bài sao cho tổng giá trị ghi trên các quân bài sẽ giống nhau cho mỗi người chơi.

Vì vậy, nếu đầu vào là A =[1, 5, 7, 4, 4, 3], thì đầu ra sẽ là [(0, 2), (5, 1), (3, 4)], vìA [ 0] + A [2] =8, A [5] + A [1] =8 và A [3] + A [4] =8.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

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]

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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);
   }

Đầu vào

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

Đầu ra

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