【寒假每日一题·2024】AcWing 5307. 小苹果(补)

文章目录

  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、知识风暴

一、题目

1、原题链接

5307. 小苹果

2、题目描述

【寒假每日一题·2024】AcWing 5307. 小苹果(补)_第1张图片
【寒假每日一题·2024】AcWing 5307. 小苹果(补)_第2张图片
【寒假每日一题·2024】AcWing 5307. 小苹果(补)_第3张图片

二、解题报告

1、思路分析

思路参考y总:y总讲解视频

(1)根据题目可以分析出:每次取走的苹果数为n/3上取整个
(2)由于每次都取走每三个苹果中的第一个,所以可以分析得出:当编号为n的苹果,也就是最后一个苹果处于最后一组三个苹果中的第一个时,它在该时候被取走(即n%3==1时)
(3)根据题目及思路进行模拟即可。

2、时间复杂度

时间复杂度为O(logn)

3、代码详解

#include 
#include 
using namespace std;
int main () {
    int n;
    cin >> n;
    int cnt = 0;     //记录当前天数
    bool flag = false;  //记录编号为n的苹果是否被拿走
    int ans = 0;      //记录编号为n的苹果第几天被拿走 
    while (n) {
        cnt++;
        //n % 3 == 1时是编号为n的苹果被拿走的时候
        if (!flag && n % 3 ==1){
            ans = cnt; 
            flag = true;
        } 
        //每次拿走的苹果数是n/3上取整的结果
        n -= ceil((double)(n) / 3);
    }
    cout << cnt << ' ' << ans;
    return 0;
}

三、知识风暴

  • 上、下取整函数
    • 头文件#include
    • 上取整函数:double ceil(double x);
    • 下取整函数:double floor(double x);
  • 参考博文:这里,感谢博主分享!

你可能感兴趣的:(AcWing寒假每日一题,算法,数据结构,贪心算法,c++,c语言,java,python)