蓝桥杯 入门训练 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有点恐怖啊~~
蓝桥杯 入门训练 Python代码详解

上一篇:Educational Codeforces Round 70 (Rated for Div. 2)


下一篇:动态规划算法二:最长公共子序列(LCS)