常用算法(带答案).docx
1 .累加输入一个整数n,求l+2+3+.+n的和。输入:一个整数输出:一个整数样例输入:10样例输出:55测试输入:4测试输出:10n=int(input()S=Oforiinrange(n+l):s+=iprint(s)2 .累乘输入一个整数n,求l*2*3+.*n的积。输入:一个整数输出:一个整数样例输入:5样例输出:120测试输入:10测试输出:3628800n=int(input()t=lforiinrange(lzn+l):t*=iprint(t)3 .计数输入一个整数n,统计ln范围内能同时被3和7整数的数有几个?输入:一个整数输出:一个整数样例输入:100样例输出:4测试输入:200测试输出:9n=int(input()js=0foriinrange(n+l):ifi%3=0andi%7=0:js+=lprint(js)4.最大值最小值输入一行整数,求这些整数中的最大值和最小值及其位置。输入:一行整数输出:最大值及其位置和最小值及其位置样例输入:346109样例输出:最大值10,位置在第4个,最小值3,位置在第1个!测试输入:10203040750测试输出:最大值50,位置在第6个,最小值7,位置在第5个!a=list(m叩(int,input().split()zd=aO;zx=aO;zdindex=O;zxindex=Oforiinrange(ljen(a):ifai>zd:zd=aizdindex=iifai<zx:zx=aizxindex=iPrint(,最大值,位置在第个,最小值,位置在第个!,.format(zd,zdindex+l,z×zz×inde×+l)5.数字分离组合输出所有三位数中,数字之和为15的数,要求尝试用数字分离和数字组合两种方法实现。结果前三项如下所示:159168177输入:无输出:若干个整数测试输入:测试输出:159168177186195249258267276285294339348357366375384393429438447456465474483492519528537546555564573582591609618627636645654663672681690708717726735744753762771780807816825834843852861870906915924933942951960数字分离:foriinrange(100,10):gw=i%10sw=i10%10bw=i100ifgw+sw+bw=15:print(i)数字组合forbwinrange(l,10)forswinrange(10):forgwinrange(10):ifbw+sw+gw=15:print(bw*100+sw*10+gw)6.穷举将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?结果前三项如下所示:19182821637324输入:无输出:若干种组合测试输入:无测试输出:1918282163732446432555406464873756828649197210108011188foriinrange(20+l):forjinrange(140+l):k=100-i-jifi*5+j*l+k*0.5=100:print(ij,k)7 .素数判断一个数是否是素数?输入:一个整数输出:是素数/不是素数样例输入:9样例输出:不是素数测试输入:3测试输出:是素数n=eval(input()js=Oforiinrange(n+l):ifn%i=O:js+=lifjs=2:Print(,是素数,)else:PrintC不是素数)8 .水仙花数水仙花数是指一个三位数其各位数字的立方之和等于它本身,如I:153=13+53+33请输出三位数中所有的水仙花数(一行一个)。第一项为:153测试输入:无测试输出:153370371407foriinrange(100,10):gw=i%10sw=i10%10bw=i100ifgw*3+sw*3+bw*3=i:print(i)9 .完备数完备数是指这个数的所有各个因子之和等于它本身,如:6=1+2+3判断ln范围内有哪些完备数?输入:一个整数n输出:Ln范围内的完备数,一行一个样例输入:100样例输出:628测试输入:1000测试输出:628496n=eval(input()foriinrange(n+l):s=0forjinrange(lj):ifi%j=0:s+=jifs=i:print(i)10同构数同构数是指一个数出现在它的平方数的右端,如:5是25的右端,所以5是同构数请输出Ln范围内所有的同构数输入:一个整数n输出:ln范围内的同构数,一行一个样例输入:100样例输出:1562576测试输入:500测试输出:1562576376n=eval(input()foriinrange(lzn+l):a=i*2ifstr(a)-len(str(i):=str(i):print(i)回文数又称对称数,如12321,请判断一个数是否是回文数?输入:一个数输出:是回文数/不是回文数样例输入:1221样例输出:是回文数测试输入:123431测试输出:不是回文数n=input()ifn=n:-l:Printr是回文数,)else:Print(不是回文数,)方法二:n=input()foriinrange(len(n)2):ifni!=n-i-l:breakifi=len(n)2-l:Print('是回文数,)else:Print(,不是回文数,)13 .加密将输入的字符串中所有字母向后移6位,到"z”或“Z”后又从“a”或“A”开始。输入:一串字符(只包含大小写字母)输出:加密后的一串字符样例输入:abABXyz样例输出:ghGHDef测试输入:ABxyz测试输出:GHdefsr=input()S="forXinsr:n=ord(x)+6iford(x.lower()+6>ord('z'):n=n-26s=s+chr(n)print(s)14 .最大公约数、最小公倍数输入两个整数m和n,请使用辗转相除法输出m和n的最大公约数和最小公倍数。输入:两个整数m和n输出:每次循环的过程(每项占5歹Q和最大公约数及最小公倍数样例输入:128样例输出:mnr1284840最大公约数:4最小公倍数:24测试输入:208测试输出:mnr2084840最大公约数:4最小公倍数:40m,n=map(int,input().split()print(,:5sr5s5s'.format(,m,n7r')mn=m*nWhiIeTrue:r=m%nprint('<5d<5d<5d,.format(mznjr)ifr=0:breakm,n=nzrPrintr最大公约数:%d,%n)Printc最小公倍数:%d'%(mnn)15 .选择法排序输入一个整数的列表,请用选择法对列表进行从小到大的排序。输入:一个整数的列表输出:每次循环的过程及结果样例输入:5,3,8,7,2样例输出:第1轮交换后:2,3,8,7,5第2轮交换后:2,3,8,7,5第3轮交换后:2,3,5,7,8第4轮交换后:2,3,5,7,8最后结果为:2,3,5,7,8测试输入:10,503,7测试输出:第1轮交换后:3,50,10,7第2轮交换后:3,7,10,50第3轮交换后:7,10,50最后结果为:3,1,10,50a=eval(input()foriinrange(len(a)-l):P=iforjinrange(i+ljen(a):ifaj<ap:P=jifp!=i:ap,ai=ai,apPrint('第轮交换后:'format(i+l,a)Printr最后结果为:)a)16 .冒泡排序输入一个整数的列表,请用冒泡排序方法对列表进行从小到大的排序。输入:一个整数的列表输出:每次循环的过程及结果样例输入:5,3,8,7,2样例输出:第1轮交换后:3,5,7,2,8第2轮交换后:5,2,7,8第3轮交换后:3,2,5,7,8第4轮交换后:3,5,7,8最后结果为:2,3,5,7,8测试输入:10,50,3,7测试输出:第1轮交换后:10,3,7,50第2轮交换后:3,7,10,50第3轮交换后:7,10,50最后结果为:3,7,10,50a=eval(input()foriinrange(len(a)-l):forjinrange(len(a)-i-l):ifaj>aj+l:aOLaO+l=aj+lUPrint('第轮交换后:'.format(i+l,a)Print('最后结果为:,,a)17 .插入排序输入一个整数的列表,请用插入排序方法对列表进行从小到大的排序。输入:一个整数的列表输出:每次循环的过程及结果样例输入:5,3,8,7,2样例输出:第1轮交换后:3,5,8,7,2第2轮交换后:5,8,7,2第3轮交换后:5,7,8,2第4轮交换后:2,3,5,7,8最后结果为:2,3,5,7,8测试输入:10,50,3,7测试输出:第1轮交换后:10,50,3,7第2轮交换后:10,50,7第3轮交换后:7,10,50最后结果为:3,7,10,50a=eval(input()foriinrange(ljen(a):forjinrange(i,0,-l):ifaj<aj-l:ajLaU-l=aj-l,ajPrint('第轮交换后:.format。,a)Printe最