蓝桥杯----基础题运算下
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、 查找整数
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
~ 输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
~ 输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
代码解析
n = int(input())
lis = list(map(int,input().split()))
a = int(input())
if a in lis:
print(lis.index(a)+1)
else:
print(-1)
先输入整数n
在通过list(map().split())创建一个可输入的数列
输入整数a
通过if-else条件判断给出结果
index函数拓展
index() 函数用于从列表中找出某个值第一个匹配项的索引位置
语法格式
list.index(x, start, end)
x为要查找的值,start和end为查找取件。如果没有,则默认数列所有范围内
二、数列特征
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
~ 输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
~ 输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
代码解析
n = int(input())
lis = list(map(int,input().split()))
for i in range(0,n):
if abs(lis[i]) < 10000:
lis.sort()
else:
print(-1)
print(lis[n-1])
print(lis[0])
print(sum(lis))
先输入整数n
在通过list(map().split())创建一个可输入的数列
通过for循环确定判断次数
lis.sort()来升序代码,注意不需要lis=lis.sort(),因为这里sort是进行排序更改原有代码,不会返回对象没有type
最后根据所以挨个输出
sort()函数拓展
list.sort() 不会返回对象,会改变原有的list
(这点与sorted()不同,sorted()函数会返回一个列表,而sort()函数是直接在原来的基础上修改,其次注意语法)
三、字母图形
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
~ 输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
~ 输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
代码解析
lis = list(map(int, input().split()))
for i in range(0, lis[0]):
for j in range(0, lis[1]):
if j == lis[1]:
print(chr(abs(i - j) + 65), end='\n')
else:
print(chr(abs(i - j) + 65), end='')
print()
首先通过列表的形式,输入n和m的值,通过list(map().split())
然后根据循环,有n行,m列数据
再根据条件判断 通过chr依次输出 ABCDEFG等字符
在j的for循环内加一个print()起分隔作用
四、 01字串
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
~ 输入格式
本试题没有输入。
~ 输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
代码解析
for i in range(0, 32):
m = bin(i) # i = 1时m = 0b1 bin-->十进制转换为2进制
if len(m) < 7:
m = m[2:]
m = m.rjust(5, '0')
print(m)
else:
print(m[2:])
print(bin(1))
通过循环32种01数
m=bin(i) # i = 1时m = 0b1 bin–>十进制转换为2进制
先将ob后面的数值赋值给m再利用rjust函数将前面的数值用0补齐
最后输出
rjust,ljust函数拓展
rjust格式
str.rjust(数值总长度,“用来补齐的字符”)
rjust()是用来将前面字符补齐或者填充
ljust格式
str.ljust(数值总长度,“用来补齐的字符”)
ljust()是用来将后面字符补齐或者填充
有点复杂,但也较好懂,且有错误方案----博主:cunchi4221
五、闰年判断
问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
-
年份是4的倍数而不是100的倍数;
-
年份是400的倍数。
其他的年份都不是闰年。
~ 输入格式
输入包含一个整数y,表示当前的年份。
~ 输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
代码解析
错误代码案例
y = int(input())
if y%4==0 and y%100!=0 and y%400==0:
print("yes")
else:
print("no")
正确代码案例
y = int(input())
if 1990 <= y <= 2050:
if y % 4 == 0 and y % 100 != 0:
print("yes")
elif y % 400 == 0:
print("yes")
else:
print("no")
蓝桥杯中,输入格式很重要,对于较长的条件可以分开判断,哪怕在pycharm中可以计算
if 1990 <= y <= 2050:我遗漏了这个y的取值范围
六、Fibonacci数列
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
~ 输入格式
输入包含一个整数n。
~ 输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
代码解析
n = int(input())
f1, f2 = 1, 1
for i in range(2, n):
f1, f2 = f2 % 10007, (f1 + f2) % 10007
print(f2)
根据公式进行计算,不要复杂化
Fibonacci数列详细解析与纠错----博客:webchang
七、圆的面积
问题描述
给定圆的半径r,求圆的面积。
~ 输入格式
输入包含一个整数r,表示圆的半径。
~ 输出格式
输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
代码解析
我的代码 90分错误
r = int(input())
PI = 3.14159265358979323
s = r * r * PI
print(round(s, 7))
别人的代码sylvia_ww
r = int(input())
PI = 3.14159265358979323
S = r*r*PI
print("{:.7f}".format(S))
round函数和format函数
round函数
round(a,b)
a 需要进行四舍五入的数字。
b 指定的位数,按此位数进行四舍五入。
注解
如果 b 大于 0,则四舍五入到指定的小数位。
如果 b 等于 0,则四舍五入到最接近的整数。
如果 b 小于 0,则在小数点左侧进行四舍五入。
format函数
序列相加
问题描述
求1+2+3+…+n的值。
~ 输入格式
输入包括一个整数n。
~ 输出格式
输出一行,包括一个整数,表示1+2+3+…+n的值。
样例输入
4
样例输出
10
代码解析
n = int(input())
result = n*(n+1)/2
print(int(result))
根据规律可知这是一个等加数列
可得数学公式n*(n+1)/2