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

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

小 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;
}
相关文章
|
2月前
|
设计模式 算法 程序员
代码与诗意:软件开发中的创造性思维
【2月更文挑战第16天】在数字世界的构建中,技术并非只是冰冷的逻辑与算法堆砌,它同样蕴含着创造力与艺术性。本文通过探索软件开发过程中的非传统元素,揭示了编程背后的创造性思维和艺术表现。从设计模式到代码重构,再到用户界面的美学设计,每一环节都体现了技术人员对于美的追寻和技术的诗性表达。文章将深入探讨如何将创造性原则融入日常开发工作,以提升软件质量并丰富开发者的技术体验。
|
2月前
|
数据挖掘 测试技术
批判性思维
批判性思维
|
8月前
|
C语言
什么叫编程思维
什么叫编程思维
|
12月前
|
设计模式 算法 程序员
培养编程思维的关键——从最基础开始
在当今信息时代,编程已经成为一项不可或缺的技能。而要成为一名优秀的程序员,除了掌握具体的编程语言和工具,更重要的是培养良好的编程思维。本文将从最最基础的层面入手,探讨如何培养编程思维。
172 0
|
12月前
|
算法
编程的辩证思维的思考
编程是一门富有创造性和逻辑思维的艺术。在编程过程中,我们不仅要解决具体的问题,还需要运用辩证思维来思考和分析各种可能性。辩证思维是一种超越二元对立的思考方式,它能够帮助我们更全面、深入地理解问题,并找到更好的解决方案。
236 0
A. Watermelon(思维)
A. Watermelon(思维)
56 0
【提升思维必看BiuBiu!】《批判性思维》01
【提升思维必看BiuBiu!】《批判性思维》01
197 0
【提升思维必看BiuBiu!】《批判性思维》01
|
存储 程序员 开发者
所谓“编程思维”,到底是什么呢?
无论是对于成人,还是对于孩子,大家都在说,应该培养和训练“编程思维”。那么,到底什么才是“编程思维”呢?这个问题我思考过很久。若从大约1995年我写下第一行“10 PRINT 1+2”代码算起,至今我的码龄也快三十了,那我就倚老卖老,来谈谈这个其实总也不太谈得清的话题。
141 0
所谓“编程思维”,到底是什么呢?
|
架构师 程序员
提高程序员思维的几本书
提高程序员思维的几本书
238 0