从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相关推荐

  1. 在哪里能收到python实例代码-Python找出最小的K个数实例代码

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...

  2. Coding:取若干个1到n的整数可求和等于整数m,求出所有组合的个数

    要求 给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数.比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4].限定n和m小于120. ...

  3. 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数

    已知一个数组table,用一个宏定义,求出数据的元素个数. // 总大小除以第一个元素的大小 #define TNTBL (sizeof(table)/sizeof(table[0]))

  4. 求出1到某个数的所有素数

    判断输入某个数,求出1到某个数的所有素数 #include <stdio.h>bool isPrime(int i) {int m;for (m = 2; m<i; m++){if ...

  5. 20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

    20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数. 效果 代码 #include &l ...

  6. c语言输入一批正整数 求其中的偶数和,编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差...

    设计一个程序,要求输入三个整数,能求出其中最大的数并输出 #includeintmain{inti;inta1,a2,a3;printf("输入三个数:\n");scanf(&qu ...

  7. python求出五位数的回文数_python之递归

    #coding=utf-8 ''' #题目:打印出如下图案(菱形) nu = 1  # 开始值 k = 2   # 变量值 while nu >= 0: print(int((7 - nu) / ...

  8. python 求出4行5列的二维数组周边元素之和

    题目:求出4行5列的二维数组周边元素之和 代码: import random x = [[random.randint(1,10)for j in range(5)]for i in range(4) ...

  9. python求字符串中循环节个数

    此题来自今日头条2017秋招真题,题目叫String Shifting,其实就是求字符串中循环节个数 题目描述: 我们规定对一个字符串的shift操作如下: shift("ABCD" ...

最新文章

  1. day02 文件读写
  2. 苹果M1芯片升级果然很炸场:性能暴涨功耗速降!但最香新品竟是无降噪AirPods 3...
  3. Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
  4. Django05-1: 有名分组、无名分组与反向解析
  5. mongodb 数组添加_NoSQL之MongoDB——简介
  6. workbook对象需要关闭_XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法...
  7. 中国股市暴涨暴跌全记录
  8. 信息学奥赛C++语言:小玉家的电费
  9. mysql 覆盖索引 简书_mysql覆盖索引与回表
  10. 马尾物联网企业主导或参与制定修订各级标准达60项
  11. Android黑科技之删除系统App
  12. c语言编译器 mini,Mini C编译器的设计与实现.ppt
  13. cesium添加天地图,从环境配置到加载天地图
  14. 顺丰java面试题_顺丰java开发面试分享,顺丰java面试经面试题
  15. 现代电商会员管理新玩法——付费会员
  16. 国内外vps有什么区别?
  17. 2019全年营收净利润双超预期 微盟开启“飞轮模式”
  18. 阿里云 CDN 业务基于边缘容器的云原生转型实践
  19. 继承(超类、子类)以及覆盖方法
  20. 程序Crash(奔溃)记录和分析工具——Crashlytics

热门文章

  1. Python中super()和__init__()方法
  2. 小黑小波比.sql语句截取字符串的子串
  3. Sharepoint Caml查询中时间格式
  4. Brocade说:网络就是云
  5. Know more about RAC GES STATISTICS
  6. 涡流探伤仪计算机软件,册亨通过式涡流探伤仪涡流探伤仪保养
  7. 在ABAP/4中声明表格控制
  8. LSMW批处理使用方法(12)_步骤16、17
  9. sap 采购订单中收货容差的取值顺序
  10. 2015各地高温补贴发放标准时间一览表