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),
广告