มีคิวผู้เล่น 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