题目描述
小 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 <bits/stdc++.h>
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;
}