Python蓝桥杯练习06——模拟练习

【第一题】

2019省A组第2题 数列求值

【题目描述】

给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求
第20190324 项的最后4 位数字。

【运行代码】

a,b,c=1,1,1
for i in range(4,20190325):
    res=(a+b+c)%10000 #小的数模除大的数还是本身
    a=b
    b=c
    c=res
print(res)

[第二题]

错误票据

【题目描述】

某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。

因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID断号,另外一个 ID 重号。

你的任务是通过编程,找出断号的 ID 和重号的 ID。

假设断号不可能发生在最大和最小号。

【输入描述】

要求程序首先输入一个整数N (N<100)表示后面数据行数。

接着读入 N 行数据。

每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数(不大于10^5105)。

【输出描述】

要求程序输出 1 行,含两个整数 m,n用空格分隔。

其中,m 表示断号 ID,n 表示重号 ID。

【输入输出样例】

示例

输入

2
5 6 8 11 9
10 12 9

输出

7 9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 64M

运行代码

n=int(input())
list_1=[]#定义空列表,存输入的数
for i in range(n):
    list_1+=list(map(int,input().split()))
    i+=1
list_1.sort() #排序
while True:
    for i in range(0,len(list_1)-1):
        if list_1[i+1]-list_1[i]>1: #这里要注意:不能是!=1,因为重号是等于0
            a=list_1[i]+1 #断号
            break
    break
for j in range(0,len(list_1)-1):
    for k in range(j+1,len(list_1)):
        if list_1[j]==list_1[k]:
            b=list_1[j] #重号
            
            break
        
print(a,b)


【第三题】

蓝桥杯2018(乘积尾零)

【题目描述】

如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?

5650 4542 3554 473 946 4114 3871 9073 90 4329 
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899 
1486 5722 3135 1170 4014 5510 5120 729 2880 9019 
2049 698 4582 4346 4427 646 9742 7340 1230 7683 
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649 
6701 6645 1671 5978 2704 9926 295 3125 3878 6785 
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915 
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074 
689 5510 8243 6114 337 4096 8199 7313 3685 211 

【运行代码】

n=list(map(int,input().split()))
s=1 #存放储存积数
c=0 #存放末尾0的个数
for i in range(len(n)):
    s*=n[i]
while s%10==0:
    s/=10
    c+=1
print(c)

【运行结果

【第四题】

[蓝桥杯2018初赛]付账问题

【题目描述】

几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。
现在有 n 个人出去吃饭,他们总共消费了 S 元。其中第 i 个人带了 ai 元。
幸运的是,所有人带的钱的总数是足够付账的。但现在问题来了:每个人分别要出多少钱呢?
为了公平起见,我们希望在总付钱量恰好为 S 的前提下,最后每个人付的钱的标准差最小。
这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是1分钱的整数倍。你需要输出最小的标准差是多少。
标准差的介绍:标准差是多个数与它们平均数差值的平方平均数,一般用于刻画这些数之间的“偏差有多大”。
形式化地说,设第 i 个人付的钱为 bi 元,那么标准差为 :
 

Python蓝桥杯练习06——模拟练习_第1张图片

【题目思路】

如果每个人带的钱都大于平均值,则最小标准差为0,bi=avg,当有人钱不够是,分为两种情况:

(1)第i人带的钱不够平均数avg,那么他只能出她所有的钱

(2)第i人带的钱比平均数多,那么他就要多平摊一点。

基本步骤:

(1)对ai进行排序;前一部分的人钱不够平均数,就出他们所有的钱

(2)从总付钱数中扣除前一部分的人出的钱,得剩下的余数,以及后一部分人出钱的平均数。

【输入格式】

第一行包含两个整数 n、S;
第二行包含 n 个非负整数 a1, ..., an。
n ≤ 5 × 10^5, 0 ≤ ai ≤ 10^9。

【输出格式】

输出最小的标准差,四舍五入保留 4 位小数
保证正确答案在加上或减去 10^−9 后不会导致四舍五入的结果发生变化。

输入样例 复制

10 30
2 1 4 7 4 8 3 6 4 7

输出样例 复制

0.7928

 【运行代码】

n,s=map(int,input().split())
a=list(map(int,input().split()))
avg=avg1=s/n
a.sort()
bzc=0 #标准差
for i in range(n):
    if a[i]

你可能感兴趣的:(蓝桥杯练习题,蓝桥杯)