一道奥赛Python题的四种解法

来源 :电脑报 | 被引量 : 0次 | 上传用户:dongmeizi1988
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读

  请用1-6六个数字组成一个六位数abcdef.其中不同的字母代表1-6中不同的数字,要求:ab是2的倍数.abc是3的倍数.abcd能被4整除.abcde能被5整除.abcdef是6的倍数
  请问:这样的六位数有几个?各是多少?

  解法1:借助字符串求解
  借助字符串方法通过多列表求解。首先建立第一个空列表my_listl:“my_listl=¨”,通过构建循环“for l in range(123456,654321):”控制从最小数123456到最大数654321依次遍历,同时根据题意进行第一次数据过滤:“if int (i//10000)%2==0 andint
  (i//1000)% 3==0 and int( 111100)%4==0 andint(i//10)%5==0 andi%6==0”,即从该数中分别取出高二位ab、高三位abc……对2、3等进行整除判断,如果五个条件同时满足的话,则将该整型数据转换为字符串后追加至my_listl中:“my_listl.append(str(1))”。
  接着建立第二个空列表my_list2,通过构建循环“for words in my_listl:“对刚刚得到的列表my_listl进行遍历,第二次数据过滤的条件是“if '0'not in words and '7' not in words and '8' not inwords and '9' not in words:”,即去除其中包含有非“123456”字符(0、7、8、9)的“不合法”数据,将满足要求的数据再次通过append方法追加至列表my_list2中:“my_list2append( words)”。
  再建立第三个空列表my_list3,对列表my_list2进行遍历:“for words in my_list2:”,将每个数据依次保存至集合my_set中:“my_set= set
  此时,在列表my_list3中所保存的数据已经是符合要求的数据了,但其类型是字符串而非真正的整型数据,因此再建立第四个列表my_list4,通过“forwords in my_list3:”对列表my_list3进行遍历,将各数据通过int()函数转换为整型数据后追加至列表my_list4中:“my_list4.append(int(words》”。
  最后,使用一条print()语句将结果输出:“print(‘这樣的六位数有’,len( my_list4),‘个,’,‘它们是:’,my_list4)”。
  运行程序,得到最终运算结果:
  “这样的六位数有2个,它们是:[123654,321654]"<如图1)。



  在Spyder编辑器右上方的“变量管理器”中也不难发现,程序在一步一步运行时的四个列表中的数据变化,从最开始的my_listl有707个数据,然后是my_list2已经被“过滤”、只保留50个数据,而最终的my_list3和my_list4则只有两个符合题意要求的数据。
  解法2:利用集合“去重”
  借助取整除与取余求各数位,再进行范围限定和集合“去重”。首先建立空列表my_list,同样是先进行五个整除条件的第一次数据过滤操作,范围仍然是从123456至654321:将符合条件的数据追加至列表my_list中:“my_list.append(i)”。
  接着对列表my_list进行数据遍历:“for num inmy_list”,利用Python中的数学取整除运算“//t’和取余运算“%”,再结合int()取整函数,分别取出每个六位数的各数位,从高位到低位依次赋值给a、b、c、d、e和f六个变量;然后进行判断:“if O
  运行程序,得到最终运算结果:“123654和321654”(如图2)。



  解法3:多层循环嵌套
  先层层循环嵌套确保各数位相异再进行整除过滤。首先建立空列表my_list,从最高位a进行层层循环嵌套:“for a in range(l,7)”,控制每个数位从最小数1至最大数6递增;接着进入下一层循环,构建次高位b:“for b iniange(1,7)”,此时要与它的上一层循环(高位a)进行是否相异的判断:“ifb! =a:”,该条件成立的话才继续进入下一层循环:“for c iniange(1,7)”,同样要进行三个变量的两两相异判断,由于上层已经进行了a、b判断,因此只进行c与a、c与b的相异判断:“if c! =a and c! =b”;按照这个规律一直向内循环,一直进行到最低位变量f,f要与它的外层循环变量e、d、c、b和a都相异:“if!=a and f!=bandf! =candf! =dandf! =e”,条件均满足的话,构建符合条件的数据保存至变量num中:“num=a*100000+b*lOOOO+c*lOOO+d*100+e*10+f”,并且将它追加至列表my_list中。
  此时,已经得到了一组各数位均不相同的六位数,再对列表my_list的数据进行遍历:“for num inmy_list”,判断条件即为题意中的五个整除条件:“if int(num//10000)%2==0and int( num//1000)% 3==0 and int (num//100)% 4==0and int (num//10)%5==0 and num% 6==0“;符合该条件的话,直接打印输出即可:“print( num)”。
  运行程序,得到最终运算结果:“123654和321654”(如图3)。



  解法4:借助itertools迭代器模块
  借助于Python的itertools迭代器模块可以比较方便地解决本题,本法代码量少、技巧性较高,中学生理解起来的难度也较大。
  首先导入itertools,建立一个只包含1-6六个数字的数列array:“array=【1,2,3,4,5,6]";接着建立变量pailie,其值为对数列array中的数据进行所有组合排列:“pailie= iterr,ools.permutations( array)”;此时得到的数据已经是各数位均相异的数据,不必再像上面的三种方法进行集合数据去重或条件限定的判断;然后对变量pailie中的数据进行遍历:“for xinpailie”,同时使用map()函数、int()函数、join方法等进行数据构建,保存至变量num中:“nuni= im(¨'.join( rnap( str,x》)”;接着,同样是使用题意中的五个整除条件构建if语句:“if in“nurn//10000)%2==0 and int (num//1000)% 3==0 and int( num//100) %4==0 and int( num//10) %5==0 andnum%6==0“,符合该条件即为题目所求的数据,最后将变量num打印输出即可:“print( num)”。



  运行程序,同样也是得到了最终运算结果:“123654和321654”(如图4)。
其他文献
前些天和朋友吃饭,正好他刚上初中的女儿想买台电脑,我说你应用不复杂的话,买一台轻薄点的、漂亮点的即可,不想小妹妹张口就是一句——“功率释放如何?”我饭差点从嘴里喷出来!这“功率释放”的概念看来已经深入人心了啊,而且已经发展到“害人不浅”的地步。  不管舆论如何沉迷于“高功率释放”,但每天回答上百个购机咨询的我们是最有发言权的——绝大部分消费者其实用途就是上网、看剧看片、办公,《英雄联盟》已经是高负
期刊
111℃高温!?笔记本?能用?  是的!能用!!而且,似乎4000元内数它最靠谱!  当你问:4000元内,买什么笔记本?十之八九,我们会将它推荐给你!  它就是:荣耀MagicBook Pro 16.1的R5 4600H款!  在后台的购机咨询中,有比较大比例的咨询者预算上限是4000元。说实话,这两年在经历了一系列的涨价后,4000元以内能够买一台我们专业编辑敢推荐的机型,凤毛麟角——哎呀也不
期刊
文档文件这样收集  用户先打开自己手机中的微信客户端,点击右上角的放大镜按钮后,搜索“腾讯文档”这个关键词。找到它的小程序后进行安装操作,点击它以后利用自己的微信账号进行登录。接下来点击小程序下方的加号按钮,在弹出的对话框中点击“导入微信文件”的选项(图1),这时就会出现“选择一个聊天”的列表。在列表中点击并选择所需文件的发送者,这样就可以看到他发送给你的所有文档文件,勾选上需要管理的所有文件后,
期刊
bling bling的質感  作为荣耀最重要的纯数字旗舰,荣耀50系列在经历了品牌重组等一系列难题之后,终于正式发布了。虽然在发布前官方就自爆了荣耀50系列的外观,但是在上手荣耀50 Pro的时候,仍然被它的外观设计美到了。  荣耀50 Pro的正面为一块6 57英寸OLED超曲面屏,黑边极窄,玻璃边缘还进行了2.5D打磨,与侧面弧度完美匹配,视觉效果和手感都很顺滑。  我们拿到的是初雪水晶版荣
期刊
新处理器发热量大,不换散热器不行  为了让处理器不“中暑”,不少玩家会在夏季开始之前清理散热器的灰尘、更换硅脂、给机箱加装风扇等,以改进散热。可是很多玩家忽略了一个根本的问题,处理器是发热大户,要是散热器性能不足以应付其发热,以上操作就几乎没有效果。  特别是Intel最近几代的产品,因为其14nm工艺制程并不先进,又还要追求高频率,只能以牺牲功耗为代价,特别是K系列产品。以最新的第11代酷睿为例
期刊
易用性与电视无异  欧洲杯已经开幕,奥运会也不远了,而在最近电视集体涨价的情况下,投影仪会是更好的选择吗?可能有的人对家用投影仪的印象还停留在过去,事实上,智能投影仪经过多年的技术迭代,无论是灯泡寿命、亮度,还是画面效果都已经有了长足进步,对于普通家用来说,智能投影仪无论是观影体验还是方便程度方面都更胜一筹。  智能投影仪自带智能系统,无须外接播放设备和音响,有块白墙就能投,自动对焦,可近可远、正
期刊
第11代酷睿全新架構+核显升级,何必再买亮机卡?  我们知道,设计师用户装机的需求和游戏玩家还不太一样,游戏玩家会非常看重显卡的游戏性能,而对于设计师用户来说,常用的3D建模和视频剪辑等等工具软件则非常吃处理器性能,而且GPU在视频编解码方面的硬件加速功能也是非常重要的。Intel第11代酷睿采用了全新的Cypress Cove架构,IPC最多提升19%,而且处理器频率本身也是酷睿系列的传统优势,
期刊
重庆的气温在不知不觉间就冲上了38℃,“火炉”终于迎来了“开张”,为了纪念这个只想在家吹空调的季节,我们本期就来做一个岩浆熔化物体的视觉特效吧。事先说明,这次教学会用到流体模拟系统,这是一个视觉效果越真实,对硬件要求就越高的系统,尤其是处理器和内存,我使用的是搭配Core 1711800H处理器、32GB DDR4-3200内存、RTX 3060独显的游戏笔记本,可以在相对还不错的幅度上进行模拟。
期刊
电老虎出沒!一款稳定输出的高功率电源不可少  处理器方面,以Intel最新的第十一代酷睿旗舰酷睿19 11900K为例,8核心16线程的它开启ABT全核5.1GHz的情况下满载功率轻松接近260W,小超100MHz满载功率更是达到312W之高。虽说它确实堪称“Adobe全家桶”生产力利器,但你的电源12V输出弱了那是真的扛不住,分分钟启动过载保护自动断电给你看。  显卡方面,我们知道支持NVIDI
期刊
银离子从根源除菌  只要鞋袜上的细菌存在一天,脚气脚臭就永远是治标不治本,要想彻底不臭脚、不烂脚,还是得定期除臭除菌。前几周师姐给你们推荐过sos的脚部除臭喷雾,但售价稍微有点贵了,这次给你们安利一款性价比更高的喷雾——日本施多康银离子除臭喷雾。  在接触这款除臭喷雾之前,我见过大大小小不下十种号称“脚臭克星”的喷雾,最后发现基本上都是用浓烈的香精味掩盖,而施多康最大的不同就是它可以深入鞋袜内部彻
期刊