蓝桥杯----基础题运算下

蓝桥杯----基础题运算下



提示:以下是本篇文章正文内容,下面案例可供参考

一、 查找整数

问题描述

给出一个包含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()函数是直接在原来的基础上修改,其次注意语法)

sort函数----博主:Dokio

三、字母图形

问题描述

利用字母可以组成一些美丽的图形,下面给出了一个例子:

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

五、闰年判断

问题描述

给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:

  1. 年份是4的倍数而不是100的倍数;

  2. 年份是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函数

详细解说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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩猩文学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值