常用算法(带答案).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最后结果为:',a)输入一个整数的列表,再输入一个整数X,在列表中按顺序查找是否存在X,若存在输出“找到了,在第*位!",若不存在则输出“不存在!”。输入:一个整数的列表和一个整数X输出:“找到了,在第*位!”或“不存在!”样例输入:5,3,8,7,22样例输出:找到了,在第5位!测试输入:5,3,8,7,29测试输出:不存在!a=eval(input()x=int(input()f=lforiinrange(len(a):ifai=×:f=0breakiff=0:PriM找到了,在第i位!,%(i+l)else:PrintC不存在!,)19.二分法查找输入一个整数的列表,再输入一个整数X,在列表中使用二分法查找是否存在X,若存在输出“找到了,在第*位!",若不存在则输出“不存在!”。输入:一个整数的列表和一个整数X输出:排序后、每次缩小范围后的情况,最后显示“找到了,在第*位!”或“找不到!”样例输入:5,3,8,7,2,10,1,4,2010样例输出:排序后:1,2,3,4,5,7,8,10,20缩小范围为:5-8缩小范围为:78找到了,在第6位!测试输入:5,3,8,7,29测试输出:排序后:2,3,578缩小范围为:34缩小范围为:44缩小范围为:54找不到!a=eval(input()x=int(input()al=sorted(a)b=O;t=len(al)-lPrint('排序后:'.format(al)whileb<=t:m=(b+t)2ifx=alm:Print('找到了,在第d位!'(a.index(x)+l)breakelifx>alm:b=m+lelse:t=m-lPriM缩小范围为:,.fOrmat(b,t)ifb>t:Print('找不到!')20.插入(1866)输入一行数,输入要插入的位置n和要插入的数X,编写程序实现将X插入到第n位,最后输出插入后的一组数输入:第一行若干个整数,第二行两个整数输出:若干个整数样例输入:35269210样例输出:3105269测试输入:1030346511测试输出:103034611a=list(m叩(int,input().split()a.append(0)n,x=map(intjnput().split()foriinrange(len(a)-l,n-2,-l):a=ai-lan-l=xforxina:print(x,end='')21.插入到有序的序列(1867)把一个数插入到一个有序的序列中,使得插入后的序列仍然有序。输入:第一行若干个整数,第二行要插入的整数输出:插入后的有序序列样例输入:3453126755样例输出:插入前:6,12,34,53,75插入后:5,6,12,34,53,75测试输入:34531267525测试输出:插入前:12,34,53,75插入后:6,12,25,34,53,75a=list(map(intjnput().split()x=int(input()a.sort()Printe插入前Oa)P=Oforiinrange(len(a):ifx<ai:P=ibreakelse:p=len(a)a.append(0)foriinrange(len(a)-p-l):a=ai-lap=×Printr插入后Oa)22.十进制转二进制(1578)样例输入:10a=int(input()S=whilea!=0:s=str(a%2)+sa=a2print(s)23.二进制转十进制(1579)s=input()n=0foriinrange(len(s):x=int(si)n=n+x*2*(len-i-l)print(n)24.十进制转八进制(1868)将输入的十进制数转换成八进制数输入:一个整数输出:一个字符串样例输入10样例输出12测试输入:50测试输出:62a=int(input()S="whilea!=0:s=str(a%8)+sa=a8print(s)25.八进制转十进制(1519)s=input()n=0foriinrange(len(s):x=int(si)n=n+x*8*(len(s)-i-l)print(n)26.十进制转十六进制(1800)a=10:'A',ll:B,12:'C',13:'D',14:'E',15:Fn=int(input()s="whilen!=0:x=n%16ifx>=10:x=axs=str(x)+sn=n16print(s)27.十六进制转十进制(1520)sr=input()s=0foriinrange(len(sr):x=sriifx>=,A':x=axs=s+int(x)*16*(len(sr)-l-i)print(s)