學習python,每日練習0615

實際公里數

解題思路:假設顯示的是四位num:
1.千位:num//1000得到整除後的商K;由於每10一輪循環出現1個4;所以在對商K對10取模結果爲n,如果餘數大於4,那麼n需要加1;小於4則n不需要加1;所以千位最後需要減去:n*1000
其他位置的數字也這樣判斷

2.算出來後需要用num - n*1000 的結果來計算百位上面應該減多少

'''
有一個車的里程錶是以整數方式顯示的,但是有個毛病,每到4時會直接跳至5,例如3後面本應該顯示4,但是直接顯示爲5。
那麼當顯示爲13公里的時候,實際上是12公里。(因爲4被跳了。)
而當顯示爲15公里的時候,實際上是13公里。(因爲4和14被跳了。)

現在請給出一個函數,當輸入顯示公里數時,返回實際公里數。
'''

'''

'''
def assert_equals(func,target):
    if func == target:
        print("Success!")
    else:
        print('Fail! {0} not equals {1}'.format(func, target))

def faulty_odometer(num):
    num1 = num
    list = []
    while num%10>=0 and num !=0:
        list.append(num%10)
        num = num//10
    # 按照從高位到地位的方式千百十個位的順序存儲
    list.reverse()
    len1 = len(list)-1
    for i in list:
        temp = 10**len1
        k = num1 // temp
        n = k // 10
        if k % 10 > 4:
            n = n + 1
        num1 = num1 - n*temp
        len1 = len1-1
    return num1

assert_equals(faulty_odometer(13),12)
assert_equals(faulty_odometer(15),13)
assert_equals(faulty_odometer(55),40)
assert_equals(faulty_odometer(2005),1462)
assert_equals(faulty_odometer(1500),1053)
assert_equals(faulty_odometer(999999),531440)
assert_equals(faulty_odometer(165826622),69517865)

結果:
Success!
Success!
Success!
Success!
Success!
Success!
Success!

題目來自:
https://fishc.com.cn/forum.php?mod=viewthread&tid=86360&ctid=588

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