给出n个苹果,每一次从第一个苹果开始拿,隔两个苹果拿一个苹果,每天拿一次,一次拿一些苹果,问最少需要多少天,把所有苹果拿完,哪一天可以拿到编号为n的苹果,n最大可以取到1e9
8
5 5
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int cnt=0;
int ans=0;
while(n>0)
{
cnt++;
int sum=ceil((double)n/3);
if(n%3==1&&ans==0) ans=cnt;
n-=sum;
}
printf("%d %d\n",cnt,ans);
return 0;
}
算是一个简单题,但是没有找到规律的话估计挺难写,应该是经验的积累的这种题型
把所有苹果分成3个3个一组,每一次取一组的最开始的那个,比如说8个苹果,分成3组,3,3,2,第一次取编号为1,4,7的三个苹果,观察之后我们可以发现,每一次是取n/3向上取整个数的苹果,然后取完之后更新苹果的数目
什么时候取完编号为n的苹果,就是当编号为n的苹果在某一组的第一个元素的时候,表示可以取走这个苹果,记录这一天的天数就是最后的答案,并且只能是更新一次答案,最后一个编号的苹果只可以被取走一次
总的来说,不是很难,但是需要有相关的经验,不然我反正是做不出来这道题