1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
a = 0.08
height = 8848130
count = 0 #用来计算对折的次数
while a < height: #将纸的厚度与珠穆朗玛峰高度进行比较
a *= 2
count += 1
print('对折次数:',count)
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#每月兔子对数即为斐波那契数列
a, b = 0, 1
n = 10 #前十个月
for i in range(1,n+1):
if i == 1:
print('第1个月兔子数量为:',b*2)
else:
a, b = b, a+b
print('第%d个月兔子的数量为:%d'%(i,b*2))
3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
n = 100
print(n,end = '=')
str1 = ''
list1 = []
for i in range(2,n+1):
for j in range(2,int(i**0.5)+1):
if i % j == 0:
break
else:
list1.append(i)
# print(list1)
while True:
for x in list1:
if n / x == float(n//x):
n //= x
str1 += str(x)
break
else:
break
for x in range(len(str1)):
if x < (len(str1)-1):
print(str1[x],end = 'x')
else:
print(str1[x])
4.输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
不会
5. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
print('完数有:')
for i in range(2,1000):
sum1 = 0
for j in range(1,i//2+1):
if i % j == 0:
sum1 += j
else:
if i == sum1:
print(i,end = ',')
6. 输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
year = int(input('请输入某年:'))
month = int(input('请输入某月:'))
day = int(input('请输入某天:'))
month_list = [31,28,31,30,31,30,31,31,30,31,30,31]
if (year % 4 == 0 and year % 100 != 0 or year % 400 == 0) and month > 2:
sum_day = day + 1
for x in month_list[:month-1]:
sum_day += x
else:
sum_day = day
for x in month_list[:month-1]:
sum_day += x
print('您输入的日期是今年的第%d天'%sum_day)
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
password = int(input('请输入你要加密的四位数字:'))
a = password % 10
b = password // 10 % 10
c = password //100 % 10
d = password // 1000
a = (a+5)%10
b = (b+5)%10
c = (c+5)%10
d = (d+5)%10
print(a,b,c,d,sep = '')
8. 获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数
print('请输入范围最大值,例如1000以内的丑数就输入1000')
n=int(input('输入您想知道的丑数范围最大值:'))
m = int(input('您想知道其中的第几个丑数:'))
factor = [2,3,5]
ugly = []
#定义一个装所有2~n之间的数的因子列表的列表
factor2 = []
for i in range(2,n):
factor1 = []
temp = True
while temp:
for x in range(2,n):
# print(i)
#如果x是i的因子,就将其存入临时列表factor1中
if i / x == float(i // x):
i //= x
factor1.append(x)
if i < x:
temp = False
break
else:
factor2.append(factor1)
for x in factor2:
ugly_number = 1
#利用集合set的去重性,降低循环次数
for y in set(x):
if y not in factor:
break
else:
#所有因子乘积就是这个丑数
for i in x:
ugly_number *= i
else:
ugly.append(ugly_number)
while m > len(ugly):
print('抱歉,您所要求的%d以内的丑数总共只有%d个'%(n,len(ugly)),end = ',')
print('并且第%d个为:'%len(ugly),ugly[len(ugly)-1])
m = int(input('请重新输入您想知道其中的第几个丑数:'))
else:
print('您想知道其中的第%d个丑数为:'%m,ugly[m-1])