天天看點

【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                    #天數遞增