1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
n = 1 #对折次数
height = 0.08 #纸厚
everest = 8848.13*10**3 #珠穆朗姆峰高度转换成MM
#print(everest)
while True:
new_height = height*2**n
# print(new_height)
if new_height >= everest:
print(n)
break
n += 1
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
n = int(input('请输入第几个月:'))
num1 = 0
num2 = 1
while n > 0 :
num1 , num2 = num2, num1 + num2
n -= 1
print(num1)
3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
转载于https://www.jianshu.com/p/fb60ae6d0beb
def get_prime_factor(num, prime_factors):
""" 获取质因数"""
i = 2 #质因数应该从二开始
is_prime = True #默认认为num是质数
while i <= sqrt(num)+1:
if not num % i:
prime_factors.append(i) #得到质因数
is_prime = False #num不是质数
get_prime_factor(num//i, prime_factors)
break
i +=1
if is_prime:
prime_factors.append(num) #num为质数时
def output_prime_factor(num):
""" 输出一个数的质因数"""
prime_factors = [] #质因数列表
num = int(num) #确保num为int
get_prime_factor(num, prime_factors)
# 思考在另一个函数中改变了prime_factor,为什么这个函数中的
# prime_factor改变了
# print(num,prime_factors)
result = str(num)+ '='
for prime_factor in prime_factors[:]:
result += str(prime_factor)+'X'
else:
result = result[:len(result)-1] #去掉末尾的'X'
print(result)
4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
最大公约数:
m = int(input('请输入m:'))
n = int(input('请输入n:'))
def resolution_max_min(m,n):
"""判断输入的数的大小"""
num_max = max(m, n)
num_min = min(m, n)
return num_max,num_min
def output_max_common_divisor(m,n):
num_max, num_min = resolution_max_min(m,n)
while True:
"""辗转相除法"""
if not num_max % num_min:
print('最大公约数为',num_min)
break
else:
num_max, num_min = num_min, num_max % num_min
output_max_common_divisor(m, n)
最小公倍数
def output_min_common_multiple(m, n):
"""公式法:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。"""
common_divisor = output_max_common_divisor(m,n)
common_multiple = m*n / common_divisor
print('最小公倍数:', common_multiple)
output_min_common_multiple(m, n)
5. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
def get_factor(num, factors):
for j in range(1, num):
if not num % j:
factors.append(j)
factors = []
print('完数有')
for i in range(2,1000):
get_factor(i, factors)
sum_factor = 0
for factor in factors[:]:
sum_factor += factor
else:
# print(i,factors)
if i == sum_factor:
print(i,end=',')
factors = []
else:
print('='*10)
6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
转载于https://www.jianshu.com/p/fb60ae6d0beb
year = int(input('请输入年:'))
month = int(input('请输入月:'))
day = int(input('请输入日:'))
if month == 1:
print('这一天是这一年的第{}天'.format(day))
else:
for m in range(1, month + 1):
if m - 1 == 2:
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
day += 29
else:
day += 28
elif m - 1 in (1, 3, 5, 7, 8, 10):
day += 31
elif m - 1 in (4, 6, 9, 11):
day += 30
else:
print('这一天是这一年的第{}天'.format(day))
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
m = int(input('请输入一个4位整数:'))
nums = []
for i in range(3,-1,-1):
nums.append(m // 10**i %10)
for index in range(3):
nums[index] = (nums[index]+5)%10
else:
# print(nums)
nums[0], nums[3]= nums[3], nums[0]
nums[1], nums[2]= nums[2], nums[1]
# print(nums)
sum_1 = 0
for index in range(4):
sum_1 += nums[index]*10**(3-index)
print(sum_1)
8. 获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数
6 =1* 2*3 -> 丑数
2 = 1*2 -> 丑数x
7 = 1*7 -> 不是丑数
1, 2, 3, 4, 5, 6, 8,9,10, 12 ….
n = int(input('请输入想要第几个丑数:'))
ugly_numbers = [1,]
ugly_factors = [1, 2, 3, 5]
i = 2
def get_prime_factor(num, prime_factors):
""" 获取质因数"""
i = 2 #质因数应该从二开始
is_prime = True #默认认为num是质数
while i <= sqrt(num)+1:
if not num % i:
prime_factors.append(i) #得到质因数
is_prime = False #num不是质数
get_prime_factor(num//i, prime_factors)
break
i +=1
if is_prime:
prime_factors.append(num) #num为质数时
while True:
prime_factors = []
get_prime_factor(i, prime_factors)
# print(i, prime_factors, end=' ')
for factor in prime_factors[:]:
if factor not in ugly_factors:
# print(i,'不是丑数')
break
else:
# print(i)
ugly_numbers.append(i)
i += 1
if len(ugly_numbers) == n:
# print(ugly_numbers)
print('第{}个丑数是{}'.format(n, ugly_numbers[n-1]))
break