#54422: C++解法 (AI上註解)


william000000000 (unknown)


#include <iostream>

using namespace std;

/**
 * 題目邏輯分析:
 * 1. 座標平移:將輸入編號 (1~10000) 減 1 變為 (0~9999),方便進行除法與取餘數運算。
 * 2. 區域判定:
 * - 第 1 區:0 ~ 2499   (每排 25 人)
 * - 第 2 區:2500 ~ 7499 (每排 50 人)
 * - 第 3 區:7500 ~ 9999 (每排 25 人)
 * 3. 輸出公式:
 * - 排數 = (相對區內編號 / 每排人數) + 1
 * - 位數 = (相對區內編號 % 每排人數) + 1
 */

int main()
{
    int seat;
    if (!(cin >> seat)) return 0;

    // 將 1-based 編號轉換為 0-based,避免整數除法在邊界值(如 25, 50)產生位移錯誤
    seat = seat - 1; 

    // --- 第一區判定 ---
    if (seat < 2500) { 
        // 第 1 區,每排 25 人
        // 排數:利用整數除法無條件捨去取得 index 後再 +1
        // 位數:利用取餘數 (%) 取得在該排的相對位置後再 +1
        cout << 1 << " " << seat / 25 + 1 << " " << seat % 25 + 1 << endl;
    }
    
    // --- 第二區判定 ---
    else if (seat < 7500) {
        // 進入第 2 區前,需扣除第一區已佔用的 2500 席,取得區內相對編號
        int relative_seat = seat - 2500;
        // 第 2 區,每排 50 人
        cout << 2 << " " << relative_seat / 50 + 1 << " " << relative_seat % 50 + 1 << endl;
    }
    
    // --- 第三區判定 ---
    else {
        // 進入第 3 區前,需扣除前兩區已佔用的 7500 席 (2500 + 5000)
        int relative_seat = seat - 7500;
        // 第 3 區,每排 25 人
        cout << 3 << " " << relative_seat / 25 + 1 << " " << relative_seat % 25 + 1 << endl;
    }

    return 0;
}