1.一張紙的厚度大約是0.08mm,對折多少次之后能達(dá)到珠穆朗瑪峰的高度(8848.13米)?
a = 0.08
high = 8848130
i = 1
while True:
a *= 2 # 每次紙張高度*2
if a > high:
break
pass
else:
i += 1
pass
pass
print(i)
print(0.08 * 2 ** 27)
2. 古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少?
# 1 1 2 3 5 8 13 21 34
n = int(input("請輸入查詢幾個月:"))
count = 0
num_2 = 0
num_1 = 1
if n <= 0:
print(0)
pass
elif n == 1:
print(1)
pass
elif n > 1:
for i in range(n):
num_2 = num_1
num_1 = count
count = num_1 + num_2
print("第%d個月總數(shù)為:"%(i + 1), count)
pass
pass
3. 將一個正整數(shù)分解質(zhì)因數(shù)。
例如:輸入90,打印出90=2x3x3x5
num = int(input("請輸入一個數(shù):"))
m = num # 循環(huán)中會改變num的值,存取一個num值
nums = [] # 用來存因數(shù)
if num == 1: # 1的質(zhì)因數(shù)為1
print("1 = 1 x 1")
pass
else:
while num > 1: # 輸入的數(shù) > 2
for i in range(2, num + 1): # 從2 - num 遍歷
if num % i == 0: # 取因數(shù)
num //= i # 取出最小因數(shù)
nums.append(str(i)) # 將因數(shù)放入列表,并轉(zhuǎn)化為字符型,便于字符串拼接
break
pass
pass
if len(nums) == 1: # 如果因數(shù)列表長度為1 ,代表只有一個質(zhì)因數(shù)
print(m, '=', '1 x', m)
pass
else: # 質(zhì)因數(shù)個數(shù) > 2
s = ' x '.join(nums) # 字符串拼接為乘法式子
print(m, '=', s)
pass
pass
4. 輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。 程序分析:利用輾除法。
m = int(input("輸入第一個數(shù):"))
n = int(input("輸入第二個數(shù):"))
b = 0 # 定義一個較大的數(shù)
s = 0 # 定義一個較小的數(shù)
# 如果m>n :b = m,s=n;如果n<m:b = n,s = m
if m > n :
b = m
s = n
pass
else:
b = n
s = m
pass
for i in range(b, 0, -1): # 從大到小遇到同時能整除m,n的數(shù)為最大公約數(shù)
if m % i == 0 and n % i == 0:
print("最大公約數(shù)是:", i)
break
pass
pass
for i in range(s, n * m + 1, 1): # 從小到大,遇到能同時被m,n整除的數(shù)即最小公倍數(shù)
if i % m == 0 and i % n == 0:
print("最小公倍數(shù)是:", i)
break
pass
pass
5. 一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為 "完數(shù) "。
例如6=1+2+3. 編程 找出1000以內(nèi)的所有完數(shù)
for i in range(1, 1000):
sum = 0
for j in range(1, i):
if i % j == 0: # 求出所有因數(shù)
sum = sum + j
if i == sum:
print(i)
6.輸入某年某月某日,判斷這一天是這一年的第幾天?
程序分析:以3月5日為例,應(yīng)該先把前兩個月的加起來,然后再加上5天即本年的第幾天,
特殊情況,閏年且輸入月份大于3時需考慮多加一天。
year = int(input("輸入年份:"))
month = int(input("輸入月份:"))
day = int(input("輸入日:"))
run_years = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
ping_years = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 閏年 2月多一天 29天
# 平年 2月少一天 28天
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
# 閏年
sum1 = 0
for i in range(month - 1):
sum1 += run_years[i]
day += sum1
else:
# 平年
sum1 = 0
for i in range(month - 1):
sum1 += ping_years[i]
day += sum1
print(day)
7. 某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。求輸入的四位整數(shù)加密后的值
key_word = []
for i in range(4):
key_word.append(int(input("請輸入第%d個數(shù):"%(i + 1))))
key_word[i] += 5
key_word[i] %= 10
print(key_word)
key_word[0], key_word[1],key_word[2], key_word[3] = key_word[3], key_word[2],key_word[1],key_word[0]
print(key_word)
8. 獲取第n個丑數(shù)。 什么是丑數(shù): 因子只包含2,3,5的數(shù)
# 6 =1* 2*3 -> 丑數(shù)
# 2 = 1*2 -> 丑數(shù)
# 7 = 1*7 -> 不是丑數(shù)
# 1, 2, 3, 4, 5, 6, 8,9,10, 12 ….
n = int(input("輸入:"))
# 講數(shù)字中的所有2,3,5除去
while n % 2 ==0 or n % 3 == 0 or n % 5 == 0:
if n % 2 == 0:
n //= 2
if n % 3 == 0:
n //= 3
if n % 5 == 0:
n //= 5
# 除剩下的數(shù)如果不是:1,2,3,5就不是丑數(shù)
if n != 1 and n != 2 and n != 3 and n != 5:
print("不是丑數(shù)!")
else:
print("是丑數(shù)!")