考点:数学中的奇数规律观察题【Python习题13】
题目:求0—7所能组成的奇数个数。
解题分析:
这题目的第一个想法,我们可能直接会考虑计算机的思维直接强行遍历,最终遍历到一个最大的8位数,并且数值中不能包含8和9的所有数的个数,这样的想法虽然可以解题,但是比较粗暴,效率低。此题,我们可以结合数学观察思维,可以使得我们的代码运行效率更高!
我们可以按照数据的位数来划分:
1位位数的奇数分别是1,3,5,7 共4个。
2位位数的奇数应该在1位位数的基础上增加,可以组成为:
11,13,15,17
21,23,25,27
31,33,35,37
...
71,73,75,77
共4*7个
3位位数的奇数应该在2位的基础上增加,可以组成为:
101,103,105,107
201,203,205,207
301,303,305,307
...
701,703,705,707
111,113,115,117
211,213,215,217
311,313,315,317
...
711,713,715,717
171,173,175,177
271,273,275,277
371,373,375,377
...
771,773,775,777
以上有8组,共4*7*8个
接下去的规律是:
4位位数的奇数的个数:4*7*8*8
...
8位位数的奇数个数:4*7*8*8*...8
观察结果是从3位位数开始,每增加1位位数,奇数个数就在原来基础上乘以8.
根据以上过程,我们得出如下程序代码:
我们用curnum=4表示1位数时候的奇数个数,这个变量记录每次位数时候的奇数个数。
我们用total=4表示记录总共的奇数个数,把每一种位数得到的奇数个数都加到里面,最终合计的结果,就是本题的答案。
程序源代码:
# -*- coding: utf-8 -*-
"""
@File文件 : ljytest86
@Time创建时间 : 2021/12/21
@Author作者 : 刘金玉
@Contact联系方式 : selidev@qq.com 编程创造城市 http://bcczcs.com
注:作者信息请保留!否则必究法律责任!
刘金玉编程,编程创造城市!
作者微信号:selidev
作者抖音号:selidev
作者B站:刘金玉编程
微信公众号:编程创造城市
题目:求0—7所能组成的奇数个数。
程序分析:
组成1位数是4个。
组成2位数是7*4个。
组成3位数是7*8*4个。
组成4位数是7*8*8*4个。
......
"""
total=4
curnum=4
print("{}位数奇数个数".format(1),curnum)
for i in range(2,9): #最大可能的组成位数是8位
if i<=2:
curnum*=7
else:
curnum*=8
print("{}位数奇数个数".format(i),curnum) #输出每一种情况
total+=curnum
print("总共个数:",total)
总结:
我们程序员往往很多时候思考会比较简单,就是利用计算机的遍历功能会把所有可能列举出来然后进行筛选,但是这样其实有些时候消耗了一些不该消耗的时间和软件性能。如果程序员在平时写代码之前思考同时结合数学思维的方法,将进一步可能进阶到大咖行列。加油!
相关文章: