1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
n = 0
while True:
thk = 0.08 * 2 ** n
if thk >= 8848130:
break
n += 1
print(n)
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
pre_1 = 1
pre_2 = 1
n = int(input('请输入月份(n>2):'))
for _ in range(n-2):
pre_n = pre_1 + pre_2
pre_1 = pre_2
pre_2 = pre_n
print(pre_n)
3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = int(input('请输入一个正整数;'))
a = []
for x in range(2, num):
while num % x == 0:
a.append(x)
num /= x
len1 = len(a)
for y in range(len1):
p_f = a[y]
print('%d * ' % p_f, end='')
4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
m = int(input('请输入两个正整数: '))
n = int(input('请输入两个正整数: '))
if m > n:
m, n = n, m
max = n
for x in range(m, 0, -1):
if m % x == 0 == n % x == 0:
print('最大公约数是%d' % x)
break
while True:
if max % m == max % n ==0:
break
max += 1
print('最小公倍数是%d' % max)
5. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
for num in range(1, 1000):
sum1 = 0
for num1 in range(1, num):
if num % num1 == 0:
sum1 += num1
if num == sum1:
print(num, end=' ')
6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
year = int(input('输入年:'))
month = int(input('输入月:'))
day = int(input('输入日:'))
num = [1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4, 5]
days = day + num[month - 2] + (month - 1) * 30
if (not year % 4 and year % 100) or not year % 400:
print('这是%d年的%d天' % (year, days + 1))
else:
print('这是%d年的%d天' % (year, days))
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
phon = 1234
new_p = 0
for i in range(4, 0, -1):
new_p += (phon % 10 + 5) % 10 * 10**(i-1)
phon //= 10
print('加密后:', new_p)
8. 获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数
6 =1* 2*3 -> 丑数
2 = 1*2 -> 丑数
7 = 1*7 -> 不是丑数
1, 2, 3, 4, 5, 6, 8,9,10, 12 ….
num = 1
m = 0
nums = []
n = int(input('获取第几个丑数:'))
while len(nums) < n:
m = num
while not m & 1:
m //= 2
else:
while not m % 5:
m //= 5
else:
while not m % 3:
m //= 3
if m == 1:
nums.append(num)
num += 1
else:
print('第%d个丑数是:' % n, nums[n-1])