Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Phần tử di chuyển k lần trong hàng đợi trong C

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