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

Array Element Moved by K: เกมแบดมินตันคิว ในภาษา C

มีคิวผู้เล่น n คน (ค่าต่างกัน 1..n) สองคนแรกเล่น คนชนะเล่นต่อกับคนถัดไป คนแพ้ไปท้ายคิว ใครชนะติดกัน k ครั้งก่อนชนะ

ข้อสังเกต

ผู้เล่นที่มีค่ามากที่สุด (n) จะชนะทุกครั้งเมื่อได้เล่น ถ้า k ≥ n-1 คำตอบคือ n เสมอ

มิฉะนั้น จำลองการเล่นจนกว่าใครจะชนะติด k ครั้ง

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

#include <iostream>
using namespace std;

int winner(int arr[], int n, int k) {
    if (k >= n-1) return n;
    int best = 0, wins = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] > best) {
            best = arr[i];
            wins = (i == 0) ? 1 : 1;
        } else {
            wins++;
        }
        if (wins >= k) return best;
    }
    return best;
}

int main() {
    int arr[] = {3, 1, 2};
    int n = 3, k = 2;
    cout << "Winner: " << winner(arr, n, k);
    return 0;
}

ผลลัพธ์

Winner: 3