5307. 小苹果

链接

链接

题意

给出n个苹果,每一次从第一个苹果开始拿,隔两个苹果拿一个苹果,每天拿一次,一次拿一些苹果,问最少需要多少天,把所有苹果拿完,哪一天可以拿到编号为n的苹果,n最大可以取到1e9

输入

8

输出

5 5

AC 代码

#include

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的苹果在某一组的第一个元素的时候,表示可以取走这个苹果,记录这一天的天数就是最后的答案,并且只能是更新一次答案,最后一个编号的苹果只可以被取走一次

总的来说,不是很难,但是需要有相关的经验,不然我反正是做不出来这道题

你可能感兴趣的:(2024寒假每日一题,算法)