CSP歷年複賽題-P9748 [CSP-J 2023] 小蘋果

五月江城發表於2024-06-20

原題連結:https://www.luogu.com.cn/problem/P9748

題意解讀:n個蘋果,每天從第1個開始,每三個蘋果拿走第一個,問幾天拿完,最後一個蘋果第幾天拿走。

解題思路:

由於每三個蘋果拿一個,每天拿走的蘋果數量是 ⌈n / 3⌉,即(n+2) / 3

n每天都要減去(n+2) / 3,直到n為0,記錄天數即可得到總天數

最後一個蘋果什麼時候拿走?必須是在n % 3 == 1的時候,所以判斷當第一次n % 3 == 1時,記錄下第幾天即可。

100分程式碼:

#include <bits/stdc++.h>
using namespace std;

int n, cnt, nth;

int main()
{
    cin >> n;
    while(n)
    {
        cnt++;
        if(n % 3 == 1 && nth == 0) nth = cnt; //如果n%3餘1,則會取走最後一個蘋果
        n -= (n + 2) / 3; //每天取走“n/3向上取整”個蘋果
    }
    cout << cnt << " " << nth;

    return 0;
}

相關文章