1、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
a=1020 day=0 while a>0: a=a//2-2 day+=1 print(a," ",end="") print() print(day)
2、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
peach=1 for i in range(9): peach=(peach+1)*2 print(peach)
3、有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对? 分析:兔子的规律为数列,1,1,2,3,5,8,13,21
x=1 y=1 for i in range(3,13): z=x+y x=y y=z print("第",i,"个月共计",z,"只兔子")
4、任意输入一个整数(小于10位),输出它一共有多少位。
a=int(input("请输入一个小于十位位数的整数\n")) sum=0 while a>0: a//=10 sum+=1 print("你输入的数的位数为:",sum)
5、计算1000以内所有不能被7整除的整数之和
sum=0 for i in range(7,1001): if i%7!=0: sum+=i print("sum=",sum)
6、本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是
fund=10000 for i in range(5): fund = fund*0.003+fund print("五年后本金为:",fund)
7、计算 1+2-3+4-5+6-7....+100的结果
sum=0 for i in range(1,101): if i%2==0: sum+=i else: sum-=i print("sum=",sum)
8、一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)
thickness=0.08/100 times=0 while thickness<8848.13: thickness *= 2 times+=1 print("经过",times,"次后超过珠穆朗玛峰,且高度为",thickness)
9、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
i=int(input("请输入一个整数\n")) a=i factorial=1 while a>0: factorial*=a a-=1 print(i,"的阶乘为:",factorial)
10、你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数
a=3e+9 print("请输入一系列正整数数据,输入-1表示输入结束") i=0 even=0 odd=0 num=0 while num != -1: i+=1 num=int(input("输入正整数\n")) if num<=0: pass elif num%2==0: even+=1 else: odd+=1 print("在你输入的数中,其中正整数偶数有",even,"个,奇数有",odd,"个")
11、判断2-100之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到 (这个数),如果能被整除,则表明此数不是素数,反之是素数。
for i in range(2,101): for j in range(2,i+1): if(j==i): print("素数",j) if(i%j==0): break
12、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
for i in range(100,1000): a=i//100 b=i//10%10 c=i%10 if(i==a**3+b**3+c**3): #print("a=",a," b=",b," c=",c) print(i)
13、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n不等于k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
n = int(input("请输入一个大于2的正整数\n")) k = 2 print(n,"=",end="") while True: if k==n: print(k) break elif n%k==0: print(k,"*",end="") n/=k k=2 else : k+=1
14、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如5+55+555+5555+55555(此时共有5个数相加)。
程序分析:关键是计算出每一项的值。。
a=int(input("请输入一个正整数\n")) num=0 sum=0 s=0 for i in range(a): num=a*10**i sum+=num s+=sum print(s)
15、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
for i in range(2,1001): sum=0 for j in range(1,i): if i%j==0: sum+=j if sum==i: print(i)
16、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高
height=100 sum=100 for i in range(10): height/=2 sum+=height print("height=",height," sum=",sum)
17、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
count=0 for a in range(1,5): for b in range(1,5): for c in range(1,5): print(f"{a}",f"{b}",f"{c}") count += 1 print("共有",count,"个数")
18、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
profit=float(input("请输入利润(单位:万元):\n")) bonus=0 if profit<0: print("你输入的利润不合理") elif profit<=10: bonus=profit*0.1 elif profit<=20: bonus=10*0.1+(profit-10)*0.075 elif profit<=40: bonus=10*0.1+10*0.75+(profit-20)*0.05 elif profit<=60: bonus=10*0.1+10*0.75+20*0.05+(profit-40)*0.03 elif profit<=100: bonus=10*0.1+10*0.75+20*0.05+20*0.03+(profit-60)*0.015 else : bonus=10*0.1+10*0.75+20*0.05+20*0.03+40*0.015+(profit-60)*0.01 print("利润为:",bonus)
19、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,另外由这个数的开方数自乘得到平方数,进行比较
num=0 for i in range(10,100): for j in range(10,100): if i**2==j**2-68: num=i**2-100 print("此数是",num)
20、用*打印出菱形:在上午的三角形基础上打印
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。
a = 5 for i in range(a): for b in range(a-i): print(" ",end="") for j in range(i+1): print("* ",end="") print() for c in range(a-1): print(" ",end="") for b in range(c+1): print(" ",end="") for j in range(a-c-1): print("* ",end="") print()
21、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
a=1#分母 b=2#分子 sum=0 for i in range(20): sum+=b/a c=a+b a=b b=c print("总和为:%.2f"%sum)
22、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
a=input("请输入一个不多于五位的正整数:\n") l=int(a) bit=1 while True: if l<10.0: break else : l/=10 bit+=1 print("你输入的数的位数为:",bit) times=len(a) while times>0: print(a[times-1]," ",end="") times-=1
23、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
num=int(input("请输入一个五位数,判断其是否为回文数:\n")) if num>=10000 or num<=99999: u=num%10#个位 d=(num%100)//10#十位 k=(num//1000)%10#千位 m=num//10000#万位 if u==m and d==k: print(num,"是回位数") else: print(num,"不是回位数") else: print("你输入的数有误")
24、对10个数进行排序
import random
num=list() for i in range(10): num.append(random.randint(0,100)) print(num) for i in range(len(num)-1): min=num[i] minIndex=i for j in range(i+1,len(num)): if min>num[j]: min=num[j] minIndex=j else: num[minIndex]=num[i] num[i]=min print(num)
25、打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
x=int(input("输入一个较小的正整数,实现杨辉三角\n")) for n in range(x): for i in range(x-n-1): print("\t",end="") num=1 print(f"{num}\t\t",end="") for m in range(1,n+1): num=num*n//m if num == 0: break print(f"{num}\t\t",end="") n-=1 m+=1 print()
26、求0—7所能组成的奇数个数。
total=0 for i in range(8): if i==0: total += 4 else: total += 4*8**(i-1)*7#最高位不能为0 print("总数为:",total)
27、冒泡排序法
程序分析:01.外层循环N-1 (N:数的个数)
02.内层循环N-1-i (i:比较的轮数,外层循环的变量)
03.两两相比 小靠前!必须进行等量转换!互换位置!
import random
lt=list() for i in range(10): lt.append(random.randint(1,100)) print(lt) #冒泡排序 for i in range(len(lt)-1): flag=False for j in range(len(lt)-i-1): if lt[j]>lt[j+1]: tmp=lt[j] lt[j]=lt[j+1] lt[j+1]=tmp flag=True if not flag: break print(lt)
28、百钱买百鸡,有 100 元钱,要去买 100 只鸡,公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只,问公,母,小鸡各买多少只 提示: a+b+c=100 只 5a+3b+1/3c=100 钱
for x in range(1,34): y=100-3*x z=2*x if y<=0: continue print(f"公鸡{x}只,母鸡{y}只,小鸡{z}只")
29、鸡兔同笼。鸡兔一共有 50 只,脚一共有 160 只,问鸡和兔各多少只?要求鸡兔至少一样 一只
ck = 0 while ck<=50: rb=50-ck if 4*rb+2*ck==160: print("兔子:",rb," 鸡:",ck) ck+=1
30、请输入一个正整数年份,判断是否是闰年?在此基础上,随机生成一个 int 型二维数组 (最大为 4 位数),计算其中闰年的个数,并输出该年份 //1~9999 输出闰年 //闰年的逻辑 400 的倍数一定是闰年,如不是 400 的倍数,是否是 100 的倍数,不是闰年, //如果不是 100 的倍数,是不是 4 的倍数
lst=[] for y in range(1,9999): if y>=4: if y%4==0: if y>=100 and y%100==0 and y<400: pass elif y<100: print(y," ",end="") elif y>400 and y%400==0: print(y," ",end="") elif y>400 and y%400!=0 and y%100==0: pass else: print(y," ",end="")
31、随机生成一个 short 型一维数组,从控制台输入一个数值,遍历数组查找,如果找到了, 打印出该数在数组中的位置,如果没有查到,请将该数值插入并形成新的数组(要求降序) //1)随机生成数组 //2)遍历数组查找 //3)对数组排序(降序) //4)插入数组
import random lt=list() for i in range(10): lt.append(random.randint(0,100)) print(lt) num=int(input("输入你要查找的数,如果未找到则倒序插入其中\n")) flag=False for i in range(len(lt)): if num == lt[i]: print("找到次数,下标为:",i) flag=True if not flag: print("没有你输入的数,已帮你倒序插入其中") lt.append(num) for i in range(len(lt)-1): max = lt[i] maxIndex=i for j in range(i+1,len(lt)): if max<lt[j]: max=lt[j] maxIndex=j lt[maxIndex]=lt[i] lt[i]=max print(lt)
32、数学黑洞 6174 已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个 过程,最多七步,必得 6174。即:7641-1467=6174。将永远出不来。求证:所有四位数数 字(全相同的除外),均能得到 6174。输出掉进黑洞
num=int(input("请输入一个四位的整数,个十百千位不能相等,个十百位不能同时等于0\n")) times=0 if num<=1000 and num>9999: print("你输入的数不符合条件") else: while num!=6174: a=num%10#个位 b=num%100//10#十位 c=num//100%10#百位 d=num//1000#千位 lt=list() lt.append(a) lt.append(b) lt.append(c) lt.append(d) #个十百千位不能相同 if a==b and b==c and c==d or (a==b==c==0): print("你输入的代码不符合条件") break #如果abcd中有0,则另外讨论 elif a==0 or b==0 or c==0 or d==0: t=0#记录0的个数 lt.sort() #0012->1002,0123->1023 for i in lt: if i == 0: t+=1 if t==1: temp=lt[0] lt[0]=lt[1] lt[1]=temp if t==2: temp=lt[0] lt[0]=lt[2] lt[2]=temp s1=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3] lt.sort(reverse=True) s2=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3] num=s2-s1 times+=1 print("第",times,"次相减,num=",num) else: #将个位十位百位千位放进数组中进行排序 lt.sort() s1=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3] lt.sort(reverse=True) s2=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3] num=s2-s1 times+=1 print("第",times,"次相减,num=",num) else: print("经过相减次数为:",times)