天天看点

【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞

题目描述

Serika 非常喜欢捏她的玩偶,她第一天会捏一下,第二天也会也会捏一下,而在第 i ( i 

【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞

 3 )​ 天,如果她在前 i -1​ 天一共捏了 ​k​ 下,那么她会在这一天捏​向下取整 

【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞

 下。

Senri 发现 Serika 的玩偶质量非常差,如果它从第一天算起被捏的次数总共 > x 次,那么它就会坏掉。

现在 Senri 想知道 Serika 的玩偶会在第几天坏掉。

输入描述

第一行一个整数 x (1

【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞

x

【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞
【Python】Comet OJ C1174[Contest #2]因自过去而至的残响起舞

)。

输出描述

一个整数,表示玩偶会在第几天坏掉。

样例输入 1

 23

样例输出 1 

9

 思路解析:

本来我是使用的递归的方法解决本题的,但是结果非常令人失望,总是显示异常,大概就是递归的深度太过深,编译都不能通过,所以就改变了策略。可以看到,x >= 1,那么天数 i 势必会 >= 2,所以即从sum = 2 ,i = 2,开始算起,后面的就是逐一判断就行了。

具体代码如下:

import math      #使用math模块是为了使用其中的向下取整函数math.floor()

x = eval(input())

sum = 2          #初始设定均为2,sum为捏的次数和
i = 2            #天数

while True:      #设置为死循环
    if sum > x :
        print(i)
        break
    else:
        sum += math.floor(sum//2) #求向下取整的数字的同时求取和进行下一步的判断
        i += 1                    #天数递增