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

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

小 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;
}
相关文章
|
5月前
|
设计模式 算法 C语言
技术进步与个人成长:从代码到思维的演变
技术不仅塑造了我们的工作方式,更深刻地影响了我们的思维模式。本文探讨了在编程实践中,个人技术能力和思维方式如何相互影响和提升,重点讨论了一些关键的经验和感悟,以及这些经历对职业发展的深远影响。
50 0
|
6月前
|
设计模式 算法 程序员
代码与诗意:软件开发中的创造性思维
【2月更文挑战第16天】在数字世界的构建中,技术并非只是冰冷的逻辑与算法堆砌,它同样蕴含着创造力与艺术性。本文通过探索软件开发过程中的非传统元素,揭示了编程背后的创造性思维和艺术表现。从设计模式到代码重构,再到用户界面的美学设计,每一环节都体现了技术人员对于美的追寻和技术的诗性表达。文章将深入探讨如何将创造性原则融入日常开发工作,以提升软件质量并丰富开发者的技术体验。
|
设计模式 存储 测试技术
领域建模的体系化思维与6种方法论
本文希望能够通过总结过去自己对领域建模的一点粗浅经验给需要的同学能有些许启发,少走弯路。
55542 72
|
6月前
|
数据挖掘 测试技术
批判性思维
批判性思维
100 0
|
12月前
|
C语言
什么叫编程思维
什么叫编程思维
103 0
|
设计模式 算法 程序员
培养编程思维的关键——从最基础开始
在当今信息时代,编程已经成为一项不可或缺的技能。而要成为一名优秀的程序员,除了掌握具体的编程语言和工具,更重要的是培养良好的编程思维。本文将从最最基础的层面入手,探讨如何培养编程思维。
245 0
|
算法
编程的辩证思维的思考
编程是一门富有创造性和逻辑思维的艺术。在编程过程中,我们不仅要解决具体的问题,还需要运用辩证思维来思考和分析各种可能性。辩证思维是一种超越二元对立的思考方式,它能够帮助我们更全面、深入地理解问题,并找到更好的解决方案。
280 0
A. Watermelon(思维)
A. Watermelon(思维)
75 0
|
设计模式 敏捷开发 运维
架构师的思维转变
架构师的思维转变
262 1