Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

각 플레이어에 대해 모든 합계를 동일하게 만드는 카드 스프레드 방법을 찾는 C++ 코드

<시간/>

n개의 요소가 있는 배열 A가 있다고 가정합니다. 여기서 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),