CSP历年复赛题-P9748 [CSP-J 2023] 小苹果
原题链接: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;
}