Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รหัส C ++ เพื่อค้นหาวิธีการกระจายไพ่เพื่อให้ผลรวมทั้งหมดเท่ากันสำหรับผู้เล่นแต่ละคน


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ที่นี่ n เป็นคู่ A[i] คือตัวเลขที่เขียนบน ithcard มี 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),