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

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

小 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;
}
相关文章
|
20天前
|
测试技术
探索软件测试中的“思维侧翼”——如何以创新思维引领测试策略###
本文旨在探讨软件测试领域中,如何通过培养与运用创新思维,提升测试策略的有效性与效率。不同于传统的技术解析或理论阐述,本文将以“思维侧翼”为喻,启发读者从不同维度审视软件测试,寻找突破常规的思路与方法。我们相信,在快速迭代的软件开发周期中,灵活多变且富有创造力的测试思维,是发现潜在缺陷、保障产品质量的关键。 ###
|
5月前
|
设计模式 算法 C语言
技术进步与个人成长:从代码到思维的演变
技术不仅塑造了我们的工作方式,更深刻地影响了我们的思维模式。本文探讨了在编程实践中,个人技术能力和思维方式如何相互影响和提升,重点讨论了一些关键的经验和感悟,以及这些经历对职业发展的深远影响。
52 0
|
6月前
|
设计模式 算法 程序员
代码与诗意:软件开发中的创造性思维
【2月更文挑战第16天】在数字世界的构建中,技术并非只是冰冷的逻辑与算法堆砌,它同样蕴含着创造力与艺术性。本文通过探索软件开发过程中的非传统元素,揭示了编程背后的创造性思维和艺术表现。从设计模式到代码重构,再到用户界面的美学设计,每一环节都体现了技术人员对于美的追寻和技术的诗性表达。文章将深入探讨如何将创造性原则融入日常开发工作,以提升软件质量并丰富开发者的技术体验。
|
6月前
|
数据挖掘 测试技术
批判性思维
批判性思维
102 0
|
C语言
什么叫编程思维
什么叫编程思维
109 0
|
算法
编程的辩证思维的思考
编程是一门富有创造性和逻辑思维的艺术。在编程过程中,我们不仅要解决具体的问题,还需要运用辩证思维来思考和分析各种可能性。辩证思维是一种超越二元对立的思考方式,它能够帮助我们更全面、深入地理解问题,并找到更好的解决方案。
283 0
|
设计模式 算法 程序员
培养编程思维的关键——从最基础开始
在当今信息时代,编程已经成为一项不可或缺的技能。而要成为一名优秀的程序员,除了掌握具体的编程语言和工具,更重要的是培养良好的编程思维。本文将从最最基础的层面入手,探讨如何培养编程思维。
250 0
A. Watermelon(思维)
A. Watermelon(思维)
75 0
|
设计模式 敏捷开发 运维
架构师的思维转变
架构师的思维转变
262 1