每天拿小苹果(提高思维系列)

简介: 每天拿小苹果(提高思维系列)

小 Y 的桌子上放着 n 个苹果从左到右排成一列,编号为从 1 到 n。


小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。


每天在拿的时候,小苞都是从左侧第 1 个苹果开始、每隔 2 个苹果拿走 1个苹果。


随后小苞会将剩下的苹果按原先的顺序重新排成一列。


小苞想知道,多少天能拿完所有的苹果,而编号为 n的苹果是在第几天被拿走的?


输入格式

输入的第一行包含一个正整数 n,表示苹果的总数。


输出格式

输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为 n 的苹果是在第几天。


数据范围

对于所有测试数据有:1≤n≤10^9。




特殊性质:小苞第一天就取走编号为 n 的苹果。


输入样例:
8
输出样例:
5 5

样例解释

小苞的桌上一共放了 8 个苹果。


小苞第一天拿走了编号为 1、4、7 的苹果。


小苞第二天拿走了编号为 2、6 的苹果。


小苞第三天拿走了编号为 3 的苹果。


小苞第四天拿走了编号为 5 的苹果。


小苞第五天拿走了编号为 8 的苹果。



思路:这里注意到n最大为1e9,一个一个模拟去写肯定会超时, 所以得用其他的方法,拿法是从第一个开始,每次隔两个拿一个,所以每次就会拿(n+2)/3个,其实就是n/3向上取整,每更新一次,days++;至于什么时候把编号n的拿到,就是n%3==1的时候,这个时候记录一下days。

完整代码:

#include <iostream>
using namespace std;
int days,date;
int main(){
    int n;
    cin>>n;
    while(n)
    {
        days++;
        if(!date&&n%3==1)date=days;
        n-=(n+2)/3;
    }
    cout<<days<<" "<<date;
}
相关文章
|
6月前
|
设计模式 算法 C语言
技术进步与个人成长:从代码到思维的演变
技术不仅塑造了我们的工作方式,更深刻地影响了我们的思维模式。本文探讨了在编程实践中,个人技术能力和思维方式如何相互影响和提升,重点讨论了一些关键的经验和感悟,以及这些经历对职业发展的深远影响。
64 0
|
7月前
|
数据挖掘 测试技术
批判性思维
批判性思维
120 0
|
C语言
什么叫编程思维
什么叫编程思维
155 0
|
设计模式 算法 程序员
培养编程思维的关键——从最基础开始
在当今信息时代,编程已经成为一项不可或缺的技能。而要成为一名优秀的程序员,除了掌握具体的编程语言和工具,更重要的是培养良好的编程思维。本文将从最最基础的层面入手,探讨如何培养编程思维。
283 0
|
算法
编程的辩证思维的思考
编程是一门富有创造性和逻辑思维的艺术。在编程过程中,我们不仅要解决具体的问题,还需要运用辩证思维来思考和分析各种可能性。辩证思维是一种超越二元对立的思考方式,它能够帮助我们更全面、深入地理解问题,并找到更好的解决方案。
296 0
A. Watermelon(思维)
A. Watermelon(思维)
87 0
|
设计模式 敏捷开发 运维
架构师的思维转变
架构师的思维转变
268 1
|
存储 文字识别 API
直给式的技术写作思维
本文通过一个技术文档写作案例,分享个人在技术写作上的一些思考,如标题所示,主要介绍自己在技术文档写作实践中总结的“直给式”写作思维的运用,希望对有产品文档或API文档写作需求的PD、开发同学有所帮助。
576 0
直给式的技术写作思维
思维概念
思维概念
208 0