• Python实践|输出0-7组成八位奇数总数


    题目




    解析

    首先分析题目的意思是:
    如果按照列举法就是

    1 3 5 7 
    (4个)一位数的时候个位数取1357
    11 13 15 17
    21 23 25 27
    ......
    71 73 75 77
    (7*4个)两位数的时候十位是1-7任何数(7种)*个位奇数(四种)
    101 103 105 107
    .......
    171 173 175 177
    .......
    771 773 775 777(7*8*4
    百位数(1-7)(七种)*(十位数0-7)(八种)*个位奇数(四种)
    

    根据归纳

    一位数4
    两位数7*4
    三位数7*8*4
    四位数7*8*8*4
    n位数7*8*8*8*...*4
    (n-2个8(因为去掉n位数个位和最高位))
    

    接下来解题

    f(n):用来计算n位数的时候有多少个0-7组成的奇数个数
    他是一个递归函数 n==0和n==【2】是两个基例
    所以n==0和n==【2】返回两个数值 应该是紧挨着的(一般如此)
    所以估测【2】填n==1----------------------------------------------------①
    else返回的【3】和f(n)本身是发生关系的一个函数
    

    看主函数
    首先l列表一个
    然后i进行for循环到9(为什么是九。。。。题目没讲!
    网上查题目也不知道为什么就是9,可能就是因为)
    最多八位数(1,2,3,4,5,6,7,8)
    也就是计算99999999以内的,题目没说!!!!

    继续 他令了一个a=【4】
    然后append(a)到l列表里面
    由后面两个print可以知道 i表示i位数(i=12345678)
    a表示i位数的奇数的个数

    i=1,a=4
    i=2,a=7*4
    i=3,a=7*8*4
    i=4,a=7*8*8*4......
    

    所以为什么要把每一次的a加到l列表里,
    因为列表储存每一次i位数的a个奇数个数也就是最后
    l=[4,28,224.......]
    最后sum(l)就是把i位数的a个奇数个数全部加起来就等于所有数字个数之和

    好,假设我们运行一遍程序
    main开始

    i=1(一位数)
    a必须=4 4肯定要和最上面f(n)这个计算个数的函数发生关系
    然后
    i=2(两位数)
    a必须=7*4(七怎么来?我们发现elif有个return 7)
    所以可以有 elif n=(i=2的时候取得n值,那不就是1嘛)的时候
    这个时候可以令a=4*f(当i=2的时候取得n值那不就是1嘛)
    所以我们发现n和i的关系
    就是a=4*f(i-1)---------------------------------------------------------②
    
    那么我们重新回到i=1时
    发现a=4*f(i-1)=4*f(0)
    a必须=4 所以f(0)必须return 1才可以
    所以【1】填1------------------------------------------------------------③
    
    继续看i=3的情况
    此时a=7*8*4
    再进行一遍程序
    a=4*f(2)==再等于啥呢
    由于题目是递归函数 f(2)必须和f(0)或者f(1)发生关系
    而且倍数是8(因为我们有了倍数7,也有了倍数4)
    
    观察,跟f(0)发生不了关系,f(0)再怎么乘,就是个一)
    i=1,a=4=4*f(0)=4*1
    i=2,a=7*4=4*f(1)=4*7
    i=3, a=4*f(2)=4*8*f(1)=4*8*7
    i=4, a=4*f(3)=4*8*f(2)=4*8*8*f(1)=4*8*8*7
    所以else的时候(也就是i不等于0也不等于1的时候)
    f(n)=8*f(n-1)
    也就是else: return 8*f(n-1)-------------------------------------------④
    

    靠,做完了。

  • 相关阅读:
    div在父集高度未知的情况下垂直居中的方法
    固比固布局 圣杯布局 css实现传统手机app布局
    img标签的onerror事件
    vue中的swiper element ui
    前后端分离跨域 关于前后端分离开发环境下的跨域访问问题(angular proxy=>nginx )
    自己开发的网页在跳转至微信公众号文章后,点击微信的返回,无法返回原网页
    关于audio元素在实际项目中遇到的问题总结
    移动端HTML5<video>视频播放优化实践
    数据类型转换
    穿越宇宙的邀请函——镜像图片技巧
  • 原文地址:https://www.cnblogs.com/hujunyao37201/p/13195597.html
Copyright © 2020-2023  润新知