原題連結: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;
}