【Python】Comet OJ C1174[Contest #2]因自過去而至的殘響起舞

題目描述

Serika 非常喜歡捏她的玩偶,她第一天會捏一下,第二天也會也會捏一下,而在第 i ( i \geq 3 )​ 天,如果她在前 i -1​ 天一共捏了 ​k​ 下,那麼她會在這一天捏​向下取整 \left \lfloor k/2 \right \rfloor 下。

Senri 發現 Serika 的玩偶質量非常差,如果它從第一天算起被捏的次數總共 > x 次,那麼它就會壞掉。

現在 Senri 想知道 Serika 的玩偶會在第幾天壞掉。

輸入描述

第一行一個整數 x (1 \leq x \leq 10^{18})。

輸出描述

一個整數,表示玩偶會在第幾天壞掉。

樣例輸入 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                    #天數遞增

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章