- 推薦自己的專欄:藍橋杯Python
- 藍橋杯的題目都有這麼個限制,時間限制:1.0s 、內存限制:256.0MB
A+B問題:輸入A、B,輸出A+B
-
輸入格式
輸入的第一行包括兩個整數,由空格分隔,分別表示A、B。比如12 45
-
輸出格式
輸出一行,包括一個整數,表示A+B的值。比如57
-
數據規模與約定
-10000 <= A, B <= 10000。
a, b = map(int, input().split())
print(a + b)
序列求和:求1+2+3+…+n的值
-
輸入格式
輸入包括一個整數n。比如100
-
輸出格式
輸出一行,包括一個整數,表示1+2+3+…+n的值。比如5050
-
數據規模與約定
1 <= n <= 1,000,000,000。
解題思路:
- 本題直接的想法是直接使用一個循環來累加,然而,當數據規模很大時,這種“暴力”的方法往往會導致超時,需要使用求和公式
- 數據規模雖然很大,但是 int 類型在python中是動態長度的,因爲python3中int類型是長整型,理論支持無限大的數字
n = int(input())
sum = (n * (n + 1)) / 2
print(int(sum))
圓的面積:給定圓的半徑r,求圓的面積
-
輸入格式
輸入包含一個整數r,表示圓的半徑。比如4
-
輸出格式
輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。比如50.2654825
-
數據規模與約定
1 <= r <= 10000。
錯誤代碼!
import math
r = int(input())
area = math.pi * r ** 2
print(round(area, 7))
然而提交之後並沒有得到100分,查看了評測記錄後,發現輸入數據爲80
時,藍橋杯系統給的正確輸出是20106.1929830
,很明顯Python內置方法round()
雖然可以用來四捨五入保留小數點後n位,但是最後是0時,並不保留!而藍橋杯系統卻需要你保留這個0!
所以:藍橋杯中不要使用round()
方法用來四捨五入保留小數點後n位
正確代碼:
import math
r = int(input())
area = math.pi * r ** 2
print('%.7f' %area)
Fibonacci數列:Fibonacci數列除以10007的餘數
-
輸入格式
輸入包含一個整數n。比如22
-
輸出格式
輸出一行,包含一個整數,表示Fn除以10007的餘數。比如7704
-
數據規模與約定
1 <= n <= 1,000,000
解題思路:
- Fibonacci數列的遞推公式爲:Fn=Fn-1+Fn-2,其中F1=F2=1,當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
- 在本題中,答案是要求Fn除以10007的餘數,因此我們只要能算出這個餘數即可,而不需要先計算出Fn的準確值,再將計算的結果除以10007取餘數,直接計算餘數往往比先算出原數再取餘簡單。
- 不使用遞歸,用循環
- 直接求餘數(這樣不用擔心數據溢出的問題,而且運行的更快)
n = int(input())
f1 = f2 = f3 = 1
while n >= 3:
f3 = (f1 + f2) % 10007
f1, f2 = f2, f3
n -= 1
print(f3)
做了這四個入門題目後,發現題目雖然簡單,但反應了許多問題!
基本瞭解了Python藍橋杯的做題方式
不過,Python的問題也很直觀反應出來了,相對於C++語言,內存使用幾乎多10倍,CPU的運行速度幾乎慢10倍,Fibonacci數列使用的CPU有點恐怖啊~~