洛谷: [CSP-J 2023] 小苹果

题目描述

小 Y 的桌子上放着 n n n 个苹果从左到右排成一列,编号为从 1 1 1 n n n

小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。

每天在拿的时候,小苞都是从左侧第 1 1 1 个苹果开始、每隔 2 2 2 个苹果拿走 1 1 1 个苹果。随后小苞会将剩下的苹果按原先的顺序重新排成一列。

小苞想知道,多少天能拿完所有的苹果,而编号为 n n n 的苹果是在第几天被拿走的?

输入格式

输入的第一行包含一个正整数 n n n,表示苹果的总数。

输出格式

输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为 n n n 的苹果是在第几天。

样例 #1

样例输入 #1

8

样例输出 #1

5 5

思路
(其实没搞懂题解为啥那么复杂,分组叭叭叭,拿到题目也想不到这种做法吧。直接模拟就好了,能直观就直观吧)
cnt: 天数。 lf:剩余的苹果数量。ans:拿走最后一个苹果是那一天。ac:当前内拿走了多少个苹果。
我们需要做的就是在每一天结束之后,将剩余的苹果数量更新,直到剩下的苹果数量为0位置,这时的cnt就是多少天。i = lf表示取到了最后一个苹果,将此时是多少天记录下来即可。
代码

#include 
using namespace std;
int cnt=1,lf,ans,ac;//天数
int main() {
	int n;
	cin >> n;
	lf = n;
	while (true) {
		ac = 0;
		for (int i = 1; i <= lf; i+=3) {
			++ac;
			if (ans == 0 && i == lf) {
				ans = cnt;
			}
		}
		lf -= ac;
		if (lf == 0) break;
		++cnt;
	}
	cout << cnt << " " << ans << endl;
	return 0;
}

洛谷: [CSP-J 2023] 小苹果_第1张图片

你可能感兴趣的:(OJ,算法)