题目描述
小 Y 的桌子上放着 n 个苹果从左到右排成一列,编号为从 1 到 n。
小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。
每天在拿的时候,小苞都是从左侧第 1 个苹果开始、每隔 2 个苹果拿走 1 个苹果。
随后小苞会将剩下的苹果按原先的顺序重新排成一列。
小苞想知道,多少天能拿完所有的苹果,而编号为 n 的苹果是在第几天被拿走的?
样例1
输入
8
输出
5 5
样例2
输入
5
输出
4 4
算法
C++ 代码
#include <iostream>
using namespace std;
#define int long long
// n 除以3 向上取整
#define n_3 (n + 3 - (n % 3 == 0 ? 3 : n % 3)) / 3
signed main()
{
int n; // 果子数
int day = 0; // 总天数
cin >> n;
int num = n; // 第n号的果子
int flag = false; // 是否拿走第n号的果子
int tempday = 1; // 拿走第n号的果子在第几天
while (n != 0) {
++day;
if (num % 3 == 1 && !flag) {
flag = true;
tempday = day;
}
num -= n_3;
n -= n_3;
}
cout << day << " " << tempday;
return 0;
}