04簡單迴圈 1. 用一行代碼求和 類型: 簡單迴圈 描述 輸入一個正整數 ...
04簡單迴圈
1. 用一行代碼求和
類型: 簡單迴圈
描述
輸入一個正整數 n
,計算從 1
到 n
各數字的和,要求用一行代碼實現。
輸入
一個正整數 n
輸出
一個正整數
示例
輸入:100
輸出:5050
標準答案
# 通過range 函數生成1到輸入的數的整數序列
# 通過sum 函數對序列求和
print(sum(range(1,int(input())+1)))
2. 數列求和
類型:簡單迴圈
描述
用戶輸入一個小於10的正整數,求1 + 12 + 123 + 1234 + …… 的前n項的和
輸入
一個正整數 n(測試數據保證小於10)
輸出
數列的和
示例
輸入:5
輸出:13715
標準答案
my_sum,temp = 0, 0
n = int(input())
for i in range(1,n + 1):
temp = temp * 10 + i # 每次迴圈使temp乘10加i
my_sum = my_sum + temp # 累加temp賦值給my_sum
print(my_sum)
3. 正負交錯數列前n項和
類型:簡單迴圈
描述
1-1/2+2/3-3/5+4/8-5/13+...的前n項和,n由用戶輸入(n>0),結果用str.format()方法保留小數點後6位數字輸出。
輸入格式
一個正整數
輸出格式
前n項的和
示例
輸入:12
輸出:0.828448
標準答案
# 分析:
# 分子規律為:1,1,2,3,4,5,...,除首個數字外是自然數
# 分母規律為:1,2,3,5,8,13...,除首個數字外,後面每個數是前面兩個數的加和
# 符號規律:正負交替
# 項數:1,2,3,...n共n項
# previous, current = 1, 1
# 1 2 1 1 + 1
# previous, current = current, previous + current
# previous, current = 1, 2
# 2 3 2 1 + 2
# previous, current = current, previous + current
# previous, current = 2, 3
# 3 5 3 2 + 3
# previous, current = current, previous + current
# previous, current = 3, 5
# ......
n = int(input())
result = 1 # 首項的值,作為累加初值
sign = -1 # 符號,第二項是負值,
previous, current = 1, 1 # 分母數字的初值,從第二項開始符合這個規律
for i in range(1, n): # 從1到n-1遍歷n-1次
previous, current = current, previous + current # 下一個數值是前面兩個數的加和
result = result + sign * i / current # 註意分子是 i
sign = -sign # 改變正負號
print('{:.6f}'.format(result))
4. 求數列前n項的平方和
類型:簡單迴圈
描述
現有數列:1,2,3,4,……,n,計算並輸出其前n項的平方和,即求:
1×1+2×2+3×3+……+n×n的和。
輸入
輸入一個正整數 n
輸出
數列前n項的平方和
示例
輸入
3
輸出
14
標準答案
#1×1+2×2+3×3……的前n項和
n = int(input())
sum = 0
for i in range(1,n+1):
sum = sum + i * i
print(sum)
5. 輸出0-9的數字
類型:簡單迴圈
描述
在同一行內輸出 0-9 中的前 n 個數字,輸出的每個數字後跟一個空格。
輸入格式
輸入一個不大於10的正整數 n
輸出格式
在同一行中輸出 0~(n-1) 的數字
示例
輸入:5
輸出:0 1 2 3 4
標準答案
n=int(input())
for i in range(n):
print(i,end=' ')
6. 人生苦短我用python
類型: 簡單迴圈
描述
輸入一個小於等於12的整數n,逐個輸出字元串人生苦短我用python
中前n個字元,每個字元後輸出一個半形逗號和一個空隔。
輸入
一個小於等於12的整數n
輸出
人生苦短我用python
中前n個字元
示例
輸入:
2
輸出:
人, 生,
標準答案
n=int(input())
s = '人生苦短我用python'
for i in range(n):
print(s[i],end = ', ')
7. 2的n次方
類型:簡單迴圈
描述
計算並輸出 2 的 n 次方,n 由用戶輸入 。
輸入格式
輸入一個非負整數 n
輸出格式
以整數類型輸出2的 n 次方
示例
輸入:5
輸出:32
標準答案
n = eval(input())
print(pow(2,n)) #pow(x,y[,z])同x**y%z,常省略z,用於計算x的y次方
8. 十進位整數轉二進位
類型:簡單迴圈
描述
十進位整數轉二進位的方法是:除以2,取出餘數,商繼續除以2,直到得到0為止,將取出的餘數逆序即可得到對應的二進位數的各位。 例如:22轉二進位的計算過程:
22 / 2 11 餘0
11/2 5 餘 1
5 /2 2 餘 1
2 /2 1 餘 0
1 /2 0 餘 1
得到22的二進位是10110
輸入格式
輸入一個非負整數
輸出格式
輸出對應的二進位數
示例
輸入:1999
輸出:11111001111
標準答案
num = int(input())
s=''
if num == 0:
s = '0'
while num != 0:
s = s + str(num % 2) # 將num對2取餘的結果轉字元串拼接到s
num = num // 2
print(s[::-1])
# 逆序輸出字元串
9. 分數序列求和
類型:簡單迴圈
描述
有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前 n
項之和, n
由用戶輸入。
輸入格式
輸入一個正整數
輸出格式
前n
項和
示例
輸入:5
輸出:8.392
標準答案
# 有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前n項之和,n由用戶輸入。
# 除了首項,分子為前一項分子分母之和,分母為前一項分子
n = int(input())
sum_of_n = 0
a, b = 2, 1
for i in range(1, n + 1):
sum_of_n = sum_of_n + a / b
b, a = a, a + b
print(round(sum_of_n, 3))
10. 棋盤放米
類型:簡單迴圈
描述
相傳古代印度國王舍罕要褒賞他的聰明能幹的宰相達依爾 (國際象棋發明者),問他需要什麼?
達依爾回答說:“國王只要在國際象棋的棋盤第一個格子里放一粒麥子,第二個格子里放兩粒,第三個格子里放四粒,按此比例以後每一格加一倍,一直放到64格(國際象棋棋盤是8×8=64格),我就感恩不盡,其他的我什麼也不要了。”
國王想:“這有多少,還不容易!”讓人扛來一袋小麥,但不到一會兒全用沒了,再來一袋很快又沒有了,結果全印度的糧食全部用完還不夠,國王納悶,怎樣也算不清這筆賬,請你幫國王計算一下,放到第 n (1<= n <=64)格時,共需多少粒麥子,寫出程式。
輸入格式
輸入一個小於等於64的正整數 n
輸出格式
一個正整數,表示多少粒麥子
示例 1
輸入:1
輸出:1
示例 2
輸入:16
輸出:65535
標準答案
#棋盤64格,第1格1粒,第2格2粒,第3格4粒……放滿64格需要多少米
#2^0+2^1+2^2+……+2^63
print(sum([2**i for i in range(64)]))
#alist=[2**i for i in range(64)]
alist=[]
for i in range(64):
alist.append(2**i)
print(sum(alist))
print(int('1'*64,2))
'''
把64個1這個二進位類型的安符串轉換志整型
int(x, base=10),base預設值為10,也就是說不指定base的值時,函數將x按十進位處理。
1. x 可以是數字或字元串,但是base被賦值後 x 只能是字元串
2. x 作為字元串時必須是 base 類型,也就是說 x 變成數字時必須能用 base 進位表示
'''
n = int(input())
mySum = 0
for i in range(n):
t=2 ** i
mySum = mySum+t
print(mySum)
11. 百錢買百雞A
類型:簡單迴圈
描述
我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,如果要求雞翁、雞母、雞雛都不為零,問雞翁、雞母、雞雛各幾何?
輸入格式
該題目沒有輸入
輸出格式
每行輸出一組結果,按雞翁數、雞母數、雞雛數的順序輸出,數字之間用空格分隔;
如果有多組解時,按雞翁數量由少到多輸出;
示例
輸出:
x xx xx
x xx xx
xx x xx
標準答案
for cock in range(1, 101): # 公雞數量不為0且小於或等於100
for hen in range(1, 101): # 母雞數量不為0且小於或等於100
for chicken in range(1, 101): # 小雞數量大於0小於等於100且是3的倍數
if chicken % 3 == 0:
if cock + hen + chicken == 100 and 5 * cock + 3 * hen + chicken // 3 == 100:
print(cock, hen, chicken) # 遇到滿足條件的數字組合就輸出
12. 計算階乘
類型:簡單迴圈
描述
用戶輸入一個非負整數 n,計算並輸出其階乘。
n!=1×2×3×...×n.
輸入格式
輸入一個非負整數 n
輸出格式
n 的階乘
示例1
輸入:5
輸出:120
示例2
輸入:0
輸出:1
標準答案
#用戶輸入一個正整數,計算其階乘
import math
#print(math.factorial(eval(input())))
n = int(input())
fact = math.factorial(n)
print(fact)
fact = 1
n = int(input())
for i in range(1,n + 1):
fact = fact * i
print(fact)
13. 階乘求和
類型:簡單迴圈
描述
輸入一個正整數n,計算 1!+2!+3!+...+n! 的和並輸出。
輸入
一個正整數n
輸出
從1到n每個數的階乘的和
示例
輸入:5
輸出:153
標準答案
# 計算1!+2!+3!+。。。+n!
def sum_factorial(n):
total, t = 1, 1
for i in range(2, n + 1):
t = t * i
total = total + t
return total
n = int(input())
print(sum_factorial(n))
# 函數式編程
def factorial(n): # 階乘函數
fact = 1
for i in range(1, n + 1):
fact = fact * i
return fact
def sum_factorial1(n): # 累加函數
total = 0
for i in range(1, n + 1):
total = total + factorial(i)
return total
print(sum_factorial1(n))
# 使用內置函數更簡單,但效率略低,規模大時有體現
# from math import factorial
# print(sum(map(factorial,range(1,n+1))))
14. 兔子繁殖問題
類型:簡單迴圈
描述
古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,用戶輸入一個月份數,計算併在一行內輸出該月的兔子總對數以及前一個月與該月兔子數量的比值(計算並觀察一下這個比值的數值是多少),比值結果保留小數點後3位,數字間用空格分隔。
輸入格式
一個大於2的正整數
輸出格式
在一行內輸出兩個數,數之間用空格隔開。第一個是整數,表示本月的兔子的對數,第二個是浮點數(嚴格保留小數點後三位),表示前一個月兔子數與本月兔子數的比值。
示例
輸入:5
輸出:5 0.600
標準答案
# 分析:
# 第1個月兔子數為1對,第2個月1對,第3個月新出生1對(共2對),第4個月再出生1對(共3對),第5個月出生2對(共5對),
# 第6個月出生3對(共8對),第7個月出生5對(共13對),第8個月出生8對(共21對)
# 得到如下數列:1,1,2,3,5,8,13,21...
# 尋找規律:從第3項開始,每一項都等於前2項之和
# 在數學上,斐波那契數列以如下被以遞推的方法定義:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
# 每次遍歷時a,b值的變化如下:
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
# 1,1,2,3,5,8,13,21,34,55...
# a,b
month = int(input()) # 輸入整數的月份
a, b = 1, 1 # a,b分別指向前兩個月的兔子數量
for i in range(3, month + 1): # 遍歷從3到輸入的月份數,每遞推一次,把a,b依次指向後面一個月的兔子數量
a, b = b, a + b # a + b 為前兩個月兔子數的加和,為當前月份兔子數,每遞推一次,
print(f'{b} {a / b :.3f}')
15. 奇數數列求和
類型:簡單迴圈
描述
輸入一個正整數 n,求數列1,3,5,……,(2n-1)的前n項的和。
輸入格式
輸入一個正整數 n
輸出格式
數列的和
示例
輸入:5
輸出:25
標準答案
n = int(input())
print(sum(range(1,2*n,2))) # 步長為2
#或
#求1+3+5+……+(2n-1)前n項和
n = int(input())
sum = 0
for i in range(1,n + 1):
sum = sum + (2 * i - 1)
print(sum)
16. 統計學生平均成績及及格人數
類型:簡單迴圈
描述
編寫程式,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型範圍內。
輸入格式
在一行中給出n個非負整數,即這n位學生的成績,其間以空格分隔。
輸出格式
按照以下格式輸出:
average = 成績均值 count = 及格人數
示例
輸入:
77 54 92 73 60
輸出:
average = 71.2
count = 4
標準答案
score = list(map(int, input().split())) # 通過map()和list()函數把用戶輸入轉化成int列表
average = sum(score) / len(score) # 用總和除以數量得到平均分
count = len(list(x for x in score if x >= 60)) # 通過列表推導式得到大於60分的列表然後用len()函數得到數量
print("average = {}".format(average))
print("count = {}".format(count))
17. 求x的y次冪
類型:簡單迴圈
描述
在兩行中分別輸入x和y兩個數,輸出x的y次方。
輸入格式
在兩行中分別輸入x和y兩個數
輸出格式
輸出x的y次方
輸入輸出示例 輸入 輸出
示例 1
輸入:
2
5
輸出:
32
示例 2
輸入:
0.5
6
輸出:
0.015625
標準答案
a=eval(input())
b=eval(input())
print(pow(a,b))
18. 有趣的算式1-987654321
類型:簡單迴圈
描述
嘗試用最簡潔的代碼實現下麵的輸出。
1 x 8 + 1 = 9
12 x 8 + 2 = 98
123 x 8 + 3 = 987
1234 x 8 + 4 = 9876
12345 x 8 + 5 = 98765
123456 x 8 + 6 = 987654
1234567 x 8 + 7 = 9876543
12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321
標準答案
for i in range(1, 10):
x = int(''.join(map(str, range(1, i + 1))))
print(f'{x} x 8 + {i} = {x * 8 + i}')
19. 有趣的算式2-1111111111
類型:簡單迴圈
描述
用簡潔的代碼輸出以下算式:
1 x 9 + 2 = 11
12 x 9 + 3 = 111
123 x 9 + 4 = 1111
1234 x 9 + 5 = 11111
12345 x 9 + 6 = 111111
123456 x 9 + 7 = 1111111
1234567 x 9 + 8 = 11111111
12345678 x 9 + 9 = 111111111
123456789 x 9 +10= 1111111111
標準答案
for i in range(1, 10):
x = int(''.join(map(str, range(1, i + 1))))
print(f'{x} x 9 + {i + 1} = {x * 9 + (i + 1)}')
20. 有趣的算式3-888888888
類型:簡單迴圈
描述
用簡潔的代碼輸出以下算式
9 x 9 + 7 = 88
98 x 9 + 6 = 888
987 x 9 + 5 = 8888
9876 x 9 + 4 = 88888
98765 x 9 + 3 = 888888
987654 x 9 + 2 = 8888888
9876543 x 9 + 1 = 88888888
98765432 x 9 + 0 = 888888888
標準答案
for i in range(9, 1, -1):
x = int(''.join(map(str, range(9, i - 1, -1))))
print(f'{x} x 9 + {i - 2} = {x * 9 + (i - 2)}')
21. 有趣的算式4-12345678987654321
類型:簡單迴圈
描述
用簡潔的代碼輸出以下算式
1 x 1 = 1
11 x 11 = 121
111 x 111 = 12321
1111 x 1111 = 1234321
11111 x 11111 = 123454321
111111 x 111111 = 12345654321
1111111 x 1111111 = 1234567654321
11111111 x 11111111 = 123456787654321
111111111 x 111111111 = 12345678987654321
標準答案
for i in range(1, 10):
x = int('1' * i)
print(f'{x} x {x} = {x * x}')