藍橋杯 入門訓練 Python代碼詳解

  • 推薦自己的專欄:藍橋杯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有點恐怖啊~~
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章