Mảng hoán vị 1..n. Mô phỏng đấu cầu lông: 2 người đầu chơi, thua ra cuối hàng, thắng chơi tiếp. Ai thắng k lần liên tiếp thắng cuộc.
Ví dụ
Hàng: [2,1,3,4,5], k=2
Kết quả: 5 (thắng 2 trận liên tiếp ở cuối)
Thuật toán tối ưu
Nếu k ≥ n-1 → trả về n (phần tử lớn nhất). Ngược lại duyệt mảng, theo dõi "best_player" và "win_count".
Chương trình
#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 << "Nguoi thang: " << winner(arr, n, k);
return 0;
}
Kết quả
Nguoi thang: 3