- 蓝桥杯的题目都有这么个限制,时间限制: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有点恐怖啊~~