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

โค้ด C++ แจกไพ่ให้ผลรวมเท่ากันทุกคน

สมมติว่าเรามีอาร์เรย์ A ขนาด n n เป็นเลขคู่ A[i] คือตัวเลขบนไพ่ ใบที่ i มี n/2 คนอยากเล่น ตอนเริ่มแต่ละคนรับ 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 := ขนาดของ A
กำหนดอาร์เรย์คู่ p ขนาด n
for i := 0 ถึง n-1:
    p[i].first := A[i]
    p[i].second := i
เรียงลำดับ p
for i := 0 ถึง n/2 - 1:
    print p[i].second และ p[n-i-1].second

ตัวอย่างโค้ด

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