为深化素质教育,提高学生技术核心素养,浙江和广东已将编程列为高考选考科目。根据当前编程语言的趋势,浙江省在几年前将编程语言从VB更换为Python。这是一道来自浙江新高考的数学编程Python例题。
01
循环数例题
请编写Python程序,实现以下功能:若一个n位的数字串满足下述条件,则称其是循环数。将这个数字视为整数(可能带有前导 0),并用任意一个 1到 n之间(包含1和 n)的整数去乘它时,会得到一个整数列。这个整数列是将原数字串首尾相接后,再在某处断开而得到的新数字串。例如142857就是循环数,142857是个6位数,因此将142857与1~6之间任意数字相乘得到的结果都是将142857数字断开相接后的结果,是不是很神奇?那么请你思考下,当用户输入一个数字后,如何判断它是否符合循环数规则。
142857 × 1 = 142857
142857 × 2 = 285714
142857 × 3 = 428571
142857 × 4 = 571428
142857 × 5 = 714285
142857 × 6 = 857142
02
解题思路
这道题目的难点在于对结果进行判断,假设我们输入的数字是142857,那么我们需要判断两数相乘的结果在142857,428571,285714,857142,571428,714285这几个数字中。这些数字无非就是将原数字转化为字符串后重新拆分得到的结果。
这里小陈老师给大家提供一个思路,我们可以将所有的结果存储在一个list集合列表当中。这样判断数字相乘的结果是否包含在这些列表中即可,若在判断过程中发现不满足条件时,立刻结束反馈此数字不是循环数,若满足条件我们继续执行,若数字与n位相乘都满足条件反馈此数字是循环数(图1)。
03
代码编写
思路梳理完成后我们可以着手编写代码了,这里我使用了Python语言进行代码的编写,当然最重要的还是思路也可以使用其他语言来完成。
首先我们设置一个字符串用于用户自定义输入num,这里最好进行一下判断,判断用户只能输入数字,不能输入其他字符。否则后续执行过程中会报错。
然后我们新增一个list列表用于保存将输入数字串首尾相接后,再在某处断开而得到的新数字串。
根据num的长度进行循环操作,在循环的过程中我们需要对原先的字符串进行拆分拼接处理。这里是一个蛮巧妙的算法,我们先获取到循环的索引,然后根据索引的位置我们对原数字进行拆分,比如索引为1,这里我们把原数字拆分成两个部分,比如142857我们就把它拆分成1和42857两部分。然后我们对两部分进行位置的转换拼接获得428571,将结果存入到list列表中。
将所有的结果都存入到list列表后,我们可以根据数字和(1-n之间的位数)相乘进行判断,判断结果是否在列表中,若结果不在列表中直接flag=false不满足条件跳出循环,若结果在列表中则继续执行下一次,直至全部满足条件说明该数字是循环数(图2)。
题目的难度不算太大,难点在于如何将结果进行存储并验证,这里的思路和过程实现还是很巧妙的。
已知的一些循环数:
142857 (6位)
0588235294117647 (16位)
052631578947368421 (18位)
0434782608695652173913 (22位)
0344827586206896551724137931 (28位)
你可以看到除了142857以外,其他几个循环数都有前导0,因此如果要判断有前导0的循环数需要加两行代码,先将这个列表前导数0去除,然后转化字符串类型即可。
nums = [int(num.lstrip('0')) for num in list1]
# 将列表类型转化为字符串类型
str_nums = [str(num) for num in nums]
文章的最后可以给大家增加一些难度,如果想知道所有从1位数到10位数总共有多少个循环数,请全部列举出来,如何实现呢?那么其他二进制、八进制、十六进制的循环数你能求出来吗?
编辑|张毅
审核|吴新
爆料联系:cpcfan1874(微信)
壹零社:用图文、视频记录科技互联网新鲜事、电商生活、云计算、ICT领域、消费电子,商业故事。《中国知网》每周全文收录;中国科技报刊100强;2021年微博百万粉丝俱乐部成员;2022年抖音优质科技内容创作者
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.