日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用Python求出:1到某个数的奇数序列里一共出现了多少个3

發布時間:2025/3/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python求出:1到某个数的奇数序列里一共出现了多少个3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從1開始到微信ID的數字中(),奇數序列里一共出現了多少個3。

這次練習附加題。

方法一:

import time start = time.clock() inum = 866278171 sum = 0def fsum(n, sum):n = str(n)for i in range(len(n)):if n[i] == '3':sum += 1return sumfor i in range(3, inum+1):if i % 2 == 0:continueif str(i).find('3') > -1 :sum = fsum(i, sum) print('1 ~ {} 之間的奇數序列,總共有 {} 個 3 。'.format(inum, sum))end = time.clock() print('耗時:{}'.format(end - start))

不過這個運行很耗時,不知道有沒有更好的方法,或加速程序執行速度的方法。

因為方法一實在太慢了,雖然算小數沒有問題,但題目中的數太大了——我電腦都休眠了,還沒算出結果。

不得已,想其他辦法,有了方法二。做這個方法時幾次把自己繞到坑里,快懷疑自己數死早了……

方法二:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import time start = time.clock() inum = 866278171 sumA = 0def f1(l, sum = 1):if l == 1:return sumsum = f1(l-1) * 10 + 10 ** (l-2) * 5return suminumStr = str(inum) while len(inumStr) > 1:l = len(inumStr) - 1if int(inumStr[0]) < 3:sumA += f1(l) * int(inumStr[0])elif int(inumStr[0]) > 3:sumA += f1(l) * int(inumStr[0]) + 10 ** (l-1) * 5else :sumA += f1(l) * int(inumStr[0]) + int((int(inumStr[1:]) + 1) / 2)inumStr = inumStr[1:]if int(inumStr) > 2:sumA += 1print('1 ~ {} 之間的奇數序列,總共有 {} 個 3 。'.format(inum, sumA))end = time.clock() print('耗時:{}'.format(end - start))

方法二和方法一比,性能是杠杠的,但邏輯上就要繞下彎才能理解了。

結果的話,挑了一部分數據,通過和方法一的結果做比較,來確認準確性。

當然因為這次是手動做的測試,所以只做來小范圍的確認。

下次要對這2個方法再做改造,然后利用python的單元測試,通過生成隨機數,再做更廣泛的確認。

關于方法二的解體思路,也在下次確認通過后,再做詳細解釋吧。

總結

以上是生活随笔為你收集整理的用Python求出:1到某个数的奇数序列里一共出现了多少个3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。