幸运数字

[题目描述]
    蓝胖是个热爱数学的人,在他心目中每个数位都由2,3, 5, 7 组成的数字是他的幸运数字,而幸运数列是将所有幸运数字排序后得到的递增数列:2,3,5, 7, 22, 23, 25, 27, 32, 33, 35, 37, 52, 53, 55, 57, 72, 73, 75, 77, ..
    蓝胖想知道这个数列中的第n个数字是多少,这个任务现在就交给你了。
[输入]
    本题包含多组数据,输入第一行为一个数Test, 表示数据组数。接下来每组数据包含一个数字n,表示蓝胖的一个一个询问。
[输出]
    输出包含Test 行,每行一个数字,表示该组数据的答案。

[输入样例]
    4
    1
    3
    10
    18
[输出样例]

7
    2
    5
    33
    73
[数据规模及约定]
    对于30%的数据,n<=2000:
    对于100%的数据,n<=10^10, Test<=2000

# -*- coding: utf-8 -*-
# @Software: PyCharm
# @File : test.py
# @Author : Benjamin
# @Time : 2021/7/5 15:44# > 4
# 2
# 3
# 5
# 7 > 字符串长度为1,区长度为1# > 4*4=16
# 22、23、25、27
# 32、33、35、37
# 52、53、55、57
# 72、73、75、77 > 字符串长度为2,区长度为4# > 16*4=64
# 222、223、225、227、232、233……
# 322、323、325、327、332、333、335、337……
# 522、523、525、527、532、533、535、537、552、553、555、557、572、573、575、577
# [722、723、725、727]、[732、733、735、737]、[752、753、755、757]、[772、773、775、777] > 字符串长度为3,区长度为16 > 1组4个# 4 4*4=16 4*4*4=64
# 4+16+64=84# num = [2, 3, 5, 7]
# 第84位,值为777,长度3位数,求值3次
# strLen、strNum
# 第83位,值为775.长度3位数,求值3次
# 15 一个区域16个值,15分成4个区域,输入第4个区域,故取值7
# 15-4-4-4=3,减去前面3个区域则属于第4个区域,此时得出第二位数字7。3属于该区域的第三个数字由此推断得出第三位数字5
# 15 一个区域16个值,3(15-4*3=3)故取值第3个,故取值为5# > 64*4=256
# [[2222、2223、2225、2227]、[2232、2233、2235、2237]、[2252…]] > 64 > 2共计64组4个一组
# 3…… > 64
# 5…… > 64
# 7…… > 64# > 256*4=1024
# [[22222、22223、22225、22227]、[22232……]] > 256
# 4+16+64+256+1024=1364def getStrInfo(num):strLen = 1 # 数字长度middle = 0begin = 4if num <= begin:strLen = strLenstrNum = numreturn strLen, strNumwhile True:end = middle + beginif begin < num <= end:strLen = strLen# 正数第几位strNum = num - beginreturn strLen, strNumbegin = endstrLen += 1middle = 4 ** strLen# 算出首位数字,还有下一次除4取余的的值后的长度和位置
def getlistIndex(strLen,strNum):listLen = 4 ** strLen# 4^3=64one = listLen / 4two = one * 2three = one * 3four = listLenstrLen = strLen - 1if strNum <= one:listIndex = 2return listIndex, strLen, strNumif strNum <= two:listIndex = 3strNum = strNum - onereturn listIndex, strLen, strNumif strNum <= three:listIndex = 5strNum = strNum - tworeturn listIndex, strLen, strNumif strNum <= four:strNum = strNum - threelistIndex = 7return str(listIndex), strLen, strNum# 算出所有数据
def listAll(listIndex, strLen, strNum):num = [2, 3, 5, 7]if strLen == 1:index = int(strNum-1)return int( str(listIndex) + str(num[index]))# 第83位,值为775,长度3位数,求值3次# strLen、strNum# 15 一个区域16个值,再分成4个区域,属于第4个区域,故取值7# 15 一个区域16个值,3(15-4*3=3,取余更快)故取值第3个,故取值为5test = "%s"%listIndexfor i in range(strLen):listIndex, strLen, strNum = getlistIndex(strLen,strNum)test = test + str(listIndex)return testdef getListAll(test):ListAllResult = []for value in test:strLen, strNum = getStrInfo(value)listIndex, strLen, strNum = getlistIndex(strLen, strNum)getVaule = listAll(listIndex,strLen,strNum)ListAllResult.append(getVaule)return ListAllResultif __name__ == "__main__":# num = 4# strLen, strNum = getStrInfo(num)# listIndex, strLen, strNum  = getlistIndex(strLen,strNum)# print(listAll(listIndex,strLen,strNum))test = [4,1,3,10,18]print(getListAll(test))

题解思考

1、4个数字,大小依次分别组合次数相同,共计为4个大组

2、每组数据再分别以4个数字大小依次组合,分别为4个小组

3、依次类推,每4个大组中分成4个小组,可得出每个小组中的第二位数字

4、最后一位取余可得出属于数组中的第几位

算法《幸运数字》由2,3, 5, 7 组成的幸运数字相关推荐

  1. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Functional)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 下边两张 ...

  2. DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测

    DL之CNN:利用卷积神经网络算法(2→2,基于Keras的API-Sequential)利用MNIST(手写数字图片识别)数据集实现多分类预测 目录 输出结果 设计思路 核心代码 输出结果 1.10 ...

  3. 数据结构与算法--查找与排序另类用法-旋转数组中的最小数字

    查找与排序 查找 查找与排序都在程序设计中常被用到的算法.查找相对而言简单,一般都是顺序查找,二分查找,哈希表查找,和二叉排序树查找.其中二分查找是我必须熟悉的一种. 哈希表和二叉排序树主要点在于他的 ...

  4. mnist手写数字识别python_基于tensorflow的MNIST手写数字识别(二)--入门篇

    一.本文的意义 因为谷歌官方其实已经写了MNIST入门和深入两篇教程了,那我写这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有 ...

  5. 数字孪生体技术白皮书_基于Flownex的数字孪生体解决方案 系列介绍之二:数据中心应用实例...

    致力于数字孪生体技术的研究与发展 通过解决方案和工程化应用造福人类 来源:数字孪生体实验室原创 作者:王永康 转载请注明来源和出处 导  读 <基于Flownex的数字孪生体解决方案>是我 ...

  6. java如何找重复数字_Java如何找出数组中重复的数字

    题目描述:找出数组中重复的数字,具体内容如下 在一个长度为n的数组里的所有数字都在 0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复了几次.请找出数组中任意 ...

  7. 求数字序列中的第n位对应的数字

    文章目录 题目 思路 代码 复杂度分析 致谢 题目 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19 ...

  8. input数字开头不能为0_Python新手上车5:数字和注释

    谈到数据类型,除了字符串以外,数字也很重要,毕竟参与计算的,更多场合是使用数字进行的. 整数和浮点数 python 中可以直接用整数进行加减乘除,请记住加减乘除的符号, 加号: "+&quo ...

  9. T9键盘[用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表]

    T9键盘 在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表.每个数字映射到0至4个字母.给定一个数字序列,实现一个算法来返回匹配单词的列表.你会得到一张含有有效单词的列表.映射 ...

  10. 数字冰雹精华分享:真正的智慧城市数字孪生IOC

    数字孪生时代,随着"新基建"政策的推进,以5G通讯.IoT.云计算.大数据.人工智能为代表的新一代信息技术蓬勃发展并深入影响着城市运行的方方面面,推动着城市管理向数字化.网络化.智 ...

最新文章

  1. 【其它】我博客的个性化代码
  2. 关于如何实现程序一天只启动一次的想法(C++实现)
  3. html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题
  4. 【Leetcode | 01】Backtracking
  5. c# asp.net mvc 开发的正方教务助手(二)
  6. 网页关键词监控采集器-编辑必备
  7. 程序包java.awt不存在_IDEA解决Java:程序包xxxx不存在的问题
  8. oracle创建job一年执行,Oracle快速创建定时job执行批量转储过程脚本参考案例
  9. 产品固件(系统)升级——curl/wget
  10. WINDOWS自带md5校验工具
  11. 微信小程序-快递查询
  12. 计算机复试专业课笔试,关于计算机考研专业课的考试内容
  13. 生信宝典:生物信息学习系列教程、视频教程
  14. MMORPG开发入门[转]
  15. C++:endl的作用
  16. 关于百度地图定位出现5e-324的解决办法
  17. python实现自动打卡_python实现腾讯文档自动打卡教程
  18. 大数据战略上升为国家战略,悄悄告诉你大数据大牛都在读的8本书
  19. bash管道符开启子进程
  20. 你可以这样学习C语言

热门文章

  1. 2019、2020年法定节假日整理 拿走点个赞好不好
  2. 电竞数据行业繁荣发展的原因
  3. 网络拓扑结构可视化呈现方案
  4. 软考考c语言还是java,计算机程序设计工程师技术水平(java)证书就是计算机技术与软件专业技术资格考试的程序员证书么?...
  5. 电影剪辑属性详解-Flash-网页制作
  6. GIS行业应用|智慧城市系列之智慧市政03
  7. illustrator下载_使用Illustrator或手绘创建XP样式的图标
  8. 1.10 Illustrator网格的使用 [Illustrator CC教程]
  9. 2-meshing-网格划分-一
  10. Android剪贴板的使用