精华内容
下载资源
问答
  • 4蓝桥杯练习系统 python 目录三、历届真题第十一届A.门牌制作B.寻找2020C.跑步锻炼E.排序F.成绩统计G.单词分析 记录蓝桥杯刷题过程 上接: 1:https://blog.csdn.net/m0_45813696/article/details/115583882 2:...

    记录蓝桥杯刷题过程

    上接:
    1:https://blog.csdn.net/m0_45813696/article/details/115583882
    2:https://blog.csdn.net/m0_45813696/article/details/115595814
    3:https://blog.csdn.net/m0_45813696/article/details/115618123


    目录

    三、历届真题

    第十一届省赛

    A.门牌制作

    在这里插入图片描述

    count=0
    for i in range(1,2021):
        count+=str(i).count('2')
    print(count)
    

    B.寻找2020

    def check_s(s):
        return s == '2020'
    
    data = []
    
    
    # 读取数据
    
    
    with open('test.txt', mode='r', encoding='utf-8') as fp:
        for line in fp:
            line = list(line.strip())
            data.append(line)
    
    print(data)
    
    m, n = len(data), len(data[0])           #m行 n列
    count = 0
    
    for i in range(m):
        for j in range(n):
            if i + 3 < m and check_s(data[i][j] + data[i+1][j] + data[i+2][j] + data[i+3][j]):          # 列
                count += 1
            if j + 3 < n and check_s(data[i][j] + data[i][j+1] + data[i][j+2] + data[i][j+3]):        # 行
                count += 1
            if i + 3 < m and j + 3 < n and check_s(data[i][j] + data[i+1][j+1] + data[i+2][j+2] + data[i+3][j+3]):         # 斜
                count += 1
    
    print(count)
    

    C.跑步锻炼

    在这里插入图片描述

    import datetime       #直接利用python的标准库datetime里的datetime timedelta weekday即可方便的求出
    
    d= 0
    start_time = datetime.datetime(year=2000, month=1, day=1)    # 2000年1月1日00:00 周六
    dela = datetime.timedelta(days=1)        #timedelta代表两个datetime之间的时间差
    end_time = datetime.datetime(year=2020, month=10, day=1)   # 到2020年10月1日00:00 周四
    # start_time.weekday() 返回数字0-6,0代表星期一,依次类推  5 代表星期六
    
    while start_time <= end_time:
        if start_time.day == 1 or start_time.weekday()== 0:# 月初或周一
            d+= 2
        else:
            d += 1
        start_time += dela
    
    print(d) 
    

    E.排序

    在这里插入图片描述

    def bubbl_sort(alist, count):   #冒泡排序
        for i in range(len(alist) - 1):
            for j in range(len(alist) - 1 - i):
                if alist[j] > alist[j+1]:
                    count += 1
                    alist[j], alist[j+1] = alist[j+1], alist[j]
            print(alist)
        return (alist, count)
    
    count = 0
    print(bubbl_sort(list('jonmlkihgfedcba'), count))
    

    F.成绩统计

    在这里插入图片描述在这里插入图片描述

    n = int(input())
    jige =0
    good = 0
    
    for i in range(n):
        s = int(input())
        if  s >=60:
            jige += 1
        if s >= 85:
            good += 1
    
    
    r1 = round(jige/n, 2)
    r2 = round(good/n, 2)
    
    print(int(r1*100), '%', sep='')  
    print(int(r2*100), '%', sep='')
    

    G.单词分析

    在这里插入图片描述

    word = input()
    arr = [0 for i in range(26)]     #记录a-z出现的次数
    
    for i in word:
        arr[ord(i) - 97] += 1          #ord('a')  97
    
    num = max(arr)                     
    
    print(chr(arr.index(num)+97))
    print(num)
    

    第十一届国赛

    A.美丽的 2

    在这里插入图片描述

    ans = 0
    for i in range(1,2021):
        if str(i).count("2") != 0:
            ans += 1
    print(ans)
    

    B.合数个数

    在这里插入图片描述

    ans = 0
    for i in range(4,2021):
        for j in range(2,(i//2)+1):  #合数a除了1和本身之外,其他约数两两为一组
                                     #一个>=(1/2)*a,一个<=(1/2)*a
            if i%j == 0:
                ans += 1
                break
    print(ans)
    

    C.阶乘约数

    在这里插入图片描述

    阶乘数学定理:
    在这里插入图片描述
    通俗来说:一个数的约数个数就是它的不同质因数的个数 + 1,再连乘的结果数

    dic = {}
    sums = 1
    for i in range(2,100):    #求
        p= True
        for j in range(2,(i//2)+1):               #合数a除了1和本身之外,其他约数两两为一组
                                                             #一个>=(1/2)*a,一个<=(1/2)*a
            if i%j == 0:
                p = False                       
                break
        if p:
            dic[i] = 1                          #2-100以内的质数 
    
    for i in range(2,101):
        temp = i
        for j in dic.keys():
            while temp % j == 0:
                temp //= j
                dic[j] += 1
    
    for values in dic.values():
        sums *= values
    print(sums)
    

    F.天干地支

    #公元1年:xinyou
    t = ["","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng"]
    d = ["","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen"]
    n = int(input())
    a,b = 1,1
    for i in range(1,n+1):
        if a>10:
            a = a%10
        if a%10 == 0:
            a = 10
        if b>12:
            b = b%12
        if b%12 == 0:
            b = 12
        a += 1
        b += 1
    print(t[a-1]+d[b-1])
    

    E.玩具蛇

    展开全文
  • 3蓝桥杯练习系统 python 目录二、算法训练ALGO-1 区间k大数查询ALGO-2 最大最小公倍数(贪心)ALGO-3 K好数(动态规划)ALGO-49 寻找数组中最大值ALGO-51 Torry的困惑(基本型)ALGO-53 最小乘积(基本型)ALGO-84 大小写...

    记录蓝桥杯刷题过程

    上接:
    1:https://blog.csdn.net/m0_45813696/article/details/115583882
    2:https://blog.csdn.net/m0_45813696/article/details/115595814


    目录

    二、算法训练

    ALGO-1 区间k大数查询

    n = input()
    s = list(map(int, input().split()))
    m = int(input())
    a = []
    for i in range(m):
        l,r,k=map(int,input().split())
        s1= sorted(s[l-1:r], reverse=True)           #降序,s[l:r]左闭右开
        a.append(s1[k-1])
    for j in range(m):
        print(a[j])
    

    ALGO-2 最大最小公倍数(贪心)

    n = int(input())
    if n <= 2:
        print(n)
    elif(n % 2 != 0):      #分析之后发现如果输入为奇数,结果:n(n-1)(n-2)
        print(n * (n-1) * (n-2))      
    else:                        #发现如果输入为偶数,分两种情况
        if n % 3 == 0:      #是3的倍数
            print((n-1)*(n-2)*(n-3)) 
        else:                     #不是3的倍数
            print(n*(n-1)*(n-3))
    

    ALGO-3 K好数(动态规划)

    K,L=list(map(int,input().split()))
    num=[[0 for i in range(L)] for j in range(K)]      #创建K行L列的矩阵
    
    for i in range(K):
        num[i][0]=1
    
        
    for j in range(L-1):                            #位数
        for i in range(K): 
            tmp=0
            for k in range(K):                      #最开始一位:0--K-1
                if k==i or abs(k-i)!=1:
                    tmp+=num[k][j]
            num[i][j+1]=tmp
    
            
    ans=0                                                 #K好数个数
    for i in range(1,K):
        ans+=num[i][L-1]
    print(ans%1000000007)
    

    ALGO-49 寻找数组中最大值

    n=int(input())
    list1 = list(map(int, input().split()))
    max = max(list1)
    num = list1.index(max)    #index() 用于从列表中找出与某个值第一个匹配的索引位置。
    print(max,num)
    

    ALGO-51 Torry的困惑(基本型)

    def is_prime(num):              #判断是否为质数
        for i in tmp:                 # 遍历质数数组
            if num % i == 0:
                return False
        tmp.append(num)
        return True
    
    
    i = 3                        # 如果n大于2, 从数字3开始遍历
    ans = 2                   # 默认填入第一个质数
    tmp = [2]                # 质数数组
    n = int(input())
    while True:
        if len(tmp) >= n:
            break
        if is_prime(i):
            ans *= i
        i += 1
    print(ans % 50000)
    

    ALGO-53 最小乘积(基本型)

    T=int(input())
    for i in range(T):
        n=int(input())
        a=list(map(int,input().split()))
        b=list(map(int,input().split()))
        a.sort(reverse=False)                      #升序
        b.sort(reverse=True)                       #降序
        ans=0
        for j in range(len(a)):
            ans=ans+a[j]*b[j]
        print(ans)
    

    ALGO-84 大小写转换(字符操作)

    a=str(input())
    b=a.swapcase()           #大小写互换
    print(b)
    

    ALGO-91 Anagrams问题(数组运算 字符操作)

    ```python
    a=str(input())
    b=str(input())
    a=a.upper()
    bb.upper()           #全换成大写
    
    ans=0
    if len(a)!=len(b):
        print('N')
    else:
        for i in range(len(a)):
            if a.count(a[i])!=b.count(a[i]):   #count() 方法用于统计字符串里某个字符出现的次数
                ans=1
                print('N')
                break
        if ans==0:
            print('Y')
    

    ALGO-148 5-1最小公倍数

    def gcd(a,b):                      #求最大公约数
        c=a%b
        while c!=0:
            a=b
            b=c
            c=a%b
        return b
    a,b=map(int,input().split())
    lcm=a*b/gcd(a,b)                #!!!
    print(int(lcm))
    

    ALGO-150 6-1 递归求二项式系数值

    def C(k,n):
        if k == n or k == 0:
            return 1
        else:
            return C(k, n-1)+C(k-1,n-1)            #递归
    
    k,n = map(int, input().split())
    print(C(k,n))
    

    ALGO-195 1的个数

    n=int(input())
    ans=0
    for i in range(1,n+1):
        strn=str(i)
        ans+=strn.count('1')   #count() 方法用于统计字符串里某个字符出现的次数
                                          #str.(sub, start= 0,end=len(string))
    print(ans)
    

    三、历届真题

    翻硬币(贪心)

    sta=input() 
    end=input()
    
    sta_nums=[]
    end_nums=[]
    ant=0
    
    #把硬币的状态转化为1和0,正面为1,反面为0
    for i in sta:
        sta_nums.append(1) if i=='*' else sta_nums.append(0)
    for j in end:
        end_nums.append(1) if j=='*' else end_nums.append(0)
    
    for i in range(len(sta_nums)-1):   #贪心:最多翻n-1次
        if end_nums[i]!=sta_nums[i]:
            sta_nums[i],sta_nums[i+1]=int(not sta_nums[i]),int(not sta_nums[i+1])
            ant+=1
    print(ant)
    

    PREV-1 核桃的数量

    a,b,c=map(int,input().split())
    if a<30 and b<30 and c<30:
        m=max(a,b,c)
        while True:
            if m%a==0 and m%b==0 and m%c==0:
                print(m)
                break
            m+=1
    

    硬币拼凑指定面额

    money=[1,5,10,20,50,100]
    n = int(input())
    li=[]
    for i in range(n+1):
        li.append(0)
    li[0]=1
    for i in money:
        for j in range(n+1):
            if j>=i:
                li[j]=li[j]+li[j-i]
        print(li)
    
    print(li[n])
    

    最大子串问题

    def FindGreatestSumOfSubArray(array):     #求最大子串
            f = array[0]
            res = array[0]
            for i in range(1,len(array)):
                f = max(f+array[i],array[i])
                res = max(res,f)
            return res
        
    array=[6,-3,-2,7,-15,1,2,2]
    print(FindGreatestSumOfSubArray(array))
    

    判断是否为质数

    n=int(input())
    
    def isnum(a):      #判断是否为质数
        if a==2:
            return True
        elif a > 2:
            for i in range(2,a):
                if (a% i) == 0:
                   return True
                else:
                    return False
        else:
            return False
    
    print(isnum(2))
    
    展开全文
  • 蓝桥杯 Python 基础练习题 问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。 输入格式 本试题没有输入...

    蓝桥杯 Python 基础练习题
    问题描述
    对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

    00000

    00001

    00010

    00011

    00100

    请按从小到大的顺序输出这32种01串。

    输入格式
    本试题没有输入。
    输出格式
    输出32行,按从小到大的顺序每行一个长度为5的01串。
    样例输出
    00000
    00001
    00010
    00011
    <以下部分省略>
    要求代码简单,如下:

    for i in range(0,2):
        for j in range(0,2):
            for k in range(0, 2):
                for l in range(0, 2):
                    for m in range(0, 2):
                        print(i,j,k,l,m,sep="")
    
    展开全文
  • 的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。 输入格式:一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000) 输出格式:一行3位数字...

    1.小数第n位

    • 问题描述:我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式.本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。
    • 输入格式:一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)
    • 输出格式:一行3位数字,表示:a除以b,小数后第n位开始的3位数字。
    • 样例输入:1 8 1
    • 样例输出:125
    • 样例输入:1 8 3
    • 样例输出:500
    • 样例输入:282866 999000 6
    • 样例输出:914

    具体代码😦)

    # 与>>类似“<< 左移” 左移一位表示乘2,二位就表示4,就是2的n次方 “>> 右移,高位补符号位” 这里右移一位表示除2“>>> 无符号右移,高位补0”;
    def quickmi(a,n):
        res=1
        while n:
            if n%2!=0:
                res*=a%mod
            a*=a%mod
            n>>=1
        return res%mod
    
    a, b, n = map(int, input().split())
    mod=b*1000
    c=a/b
    # print(c)
    c=int(c*quickmi(10,n+2))
    x=c%1000
    print(x)
    

    运行结果:
    在这里插入图片描述

    2.Excel地址

    • 问题描述:Excel单元格的地址表示很有趣,它使用字母来表示列号。
        比如,
        A表示第1列,
        B表示第2列,
        Z表示第26列,
        AA表示第27列,
        AB表示第28列,
        BA表示第53列,
        …
        当然Excel的最大列号是有限度的,所以转换起来不难。
        如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
        本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
    • 样例输入:26
    • 样例输出:Z
    • 样例输入:27
    • 样例输出:AA
    • 样例输入:2054
    • 样例输出:BZZ

    具体代码😦)

    n=int(input())
    a=[]
    while n:
        if n%26==0:
            a.append(26)
            n=n//26-1
        else:
            a.append(n%26)
            n=n//26
    for i in range(len(a)):
        print(chr(a[len(a)-1-i]+64),end='')
    
    

    运行结果:
    在这里插入图片描述

    3.对局匹配

    • 问题描述:小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。
        小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。
        现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, … AN。
        小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于K)?
    • 输入格式 :第一行包含两个个整数N和K。   第二行包含N个整数A1, A2, … AN,对于30%的数据,1 <= N <= 10   对于100%的数据,1 <= N <= 100000, 0 <= Ai <= 100000, 0 <= K <= 100000
    • 输出格式 :一个整数,代表答案。
    • 样例输入:
      10 0
      1 4 2 8 5 7 1 4 2 8
    • 样例输出:6

    具体代码😦)

    n,m=list(map(int,input().split()))
    arr=list(map(int,input().split()))
    cout=0
    for i in range(0,len(arr)):
        for j in range(i+1,len(arr)):
            if arr[i]-arr[j]==m:
                cout+=1
            else:
                continue
    # print(arr)
    print(n-cout)
    
    

    运行结果:
    在这里插入图片描述

    4.k倍区间

    • 问题描述:给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。
        你能求出数列中总共有多少个K倍区间吗?
    • 输入格式 :第一行包含两个整数N和K。(1 <= N, K <= 100000)以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)
    • 输出格式 :输出一个整数,代表K倍区间的数目。
    • 样例输入:
      5 2
      1
      2
      3
      4
      5
    • 样例输出:6

    具体代码:(但是只通过两个,28分)

    
    n,m=list(map(int,input().split()))
    a=[]
    b=[0]
    cout=0
    for i in range(n):
        a.append(int(input()))
        b.append(sum(a))
    # print(a)
    # print(b)
    for i in range(1,n+1):
        for j in range(i,n+1):
            if (b[j]-b[i-1])%m==0:
                cout+=1
    print(cout)
    
    

    运行结果:
    在这里插入图片描述

    5.小朋友排队

    • 问题描述:n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。
        每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。
        如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。
        请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。
        如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。
    • 输入格式 :输入的第一行包含一个整数n,表示小朋友的个数。第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
    • 输出格式 :输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
    • 样例输入:
      3
      3 2 1
    • 样例输出:9

    具体代码:(但是只通过两个,其它的全部超时,只有20分)

    • 解题思想:先创建一个3行N列的矩阵,第一行就是输入的我们输入的数,第二行是根据输入的数的个数创建相同个数的0,用来表示每个小朋友不高兴程度的累积,一开始为0,第三行就是与n相同个数的1,用来表示他们一开始不高兴程度的增加的初始值,后面随着两两交换,这两个数对应的第三行各自加到第二行,并且第三行自动加1,表示下一次当前小朋友移动的话会多一个值增加,并且这两个小朋友所在的第一行第二行第三行也要互相交换位置,最后我们得到的第二行就是每个小朋友的不高兴程度的值,通过迭代加起来即可,但是这种解法虽然可以通过,却只有两个正确得到20分,其它的全部超时,说明思路是没问题的,代码还需要改进。
    
    def m_swap(a,b):
        t=int(b)
        b=int(a)
        a=t
        return a,b
    
    def change(list):
        result = []
        for i in range(n):
            result.append(re_list[0][i])
        return result
        
    n=int(input())
    arr=list(map(int,input().split()))
    arr_i=arr[:]
    arr_i.sort()
    arr1=[0 for i in range(n)]
    arr2=[1 for i in range(n)]
    list=arr+arr1+arr2
    re_list=[arr,arr1,arr2]
    # for i in re_list:
    #     for j in range(n):
    #         print(i[j],end=' ')
    #     print()
    # print('****************************begin**********************************')
    for k in re_list:
        for j in range(0,n-1):
            if k==re_list[0]:
                if k[j]>k[j+1]:
                    re_list[1][j]+=re_list[2][j]
                    re_list[1][j+1]+=re_list[2][j+1]
                    re_list[2][j]+=1
                    re_list[2][j+1]+=1
                    re_list[0][j],re_list[0][j+1]=m_swap(int(re_list[0][j]),int(re_list[0][j+1]))
                    re_list[1][j], re_list[1][j + 1] =m_swap(int(re_list[1][j]),int(re_list[1][j + 1]))
                    re_list[2][j], re_list[2][j + 1] =m_swap(int(re_list[2][j]),int(re_list[2][j + 1]))
                    # 每次换位置之后数组显示
                    # for i in re_list:
                    #     for j in range(n):
                    #         print(i[j], end=' ')
                    #     print()
                    # print("****************************************************************")
                    result=change(re_list[0])
                    # print(result)
                    while result!=arr_i:
                        for k in re_list:
                            for j in range(0, n - 1):
                                if k == re_list[0]:
                                    if k[j] > k[j + 1]:
                                        re_list[1][j] += re_list[2][j]
                                        re_list[1][j + 1] += re_list[2][j + 1]
                                        re_list[2][j] += 1
                                        re_list[2][j + 1] += 1
                                        re_list[0][j], re_list[0][j + 1] = m_swap(int(re_list[0][j]),
                                                                                  int(re_list[0][j + 1]))
                                        re_list[1][j], re_list[1][j + 1] = m_swap(int(re_list[1][j]),
                                                                                  int(re_list[1][j + 1]))
                                        re_list[2][j], re_list[2][j + 1] = m_swap(int(re_list[2][j]),
                                                                                  int(re_list[2][j + 1]))
                                        # 每次换位置之后数组显示
                                        # for i in re_list:
                                        #     for j in range(n):
                                        #         print(i[j], end=' ')
                                        #     print()
                                        # print("****************************************************************")
                                        result = change(re_list[0])
    sum=0
    for i in range(n):
        sum+=re_list[1][i]
    print(sum)
    
    
    
    

    运行结果:
    在这里插入图片描述

    6.单词分析

    • 问题描述:小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

    现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

    • 输入格式 :输入一行包含一个单词,单词只由小写英文字母组成。
    • 输出格式 :输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。

    第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

    • 样例输入:lanqiao
    • 样例输出:
      a
      2

    具体代码:

    from collections import Counter
    n=input()
    arr=[]
    for i in range(len(n)):
        arr.append(n[i])
    # print(arr)
    a=Counter(arr)
    # print(a)
    b=a.most_common(3)
    # print(b)
    for i in range(len(b)-1):
        if b[i][1]==b[i+1][1]:
            if b[i][0]>b[i+1][0]:
                print(b[i+1][0])
                print(b[i+1][1])
                break
        else:
            # print(b[i][0])
            # print(b[i][1])
            print(a.most_common(1)[0][0])
            print(a.most_common(1)[0][1])
            break
    

    运行结果
    在这里插入图片描述

    7.成绩分析

    • 问题描述:
      小蓝给学生们组织了一场考试,卷面总分为 100分,每个学生的得分都是一个 0到100的整数。请计算这次考试的最高分、最低分和平均分。
    • 输入格式 :输入的第一行包含一个整数 ,表示考试人数。
      接下来 n行,每行包含一个 0至100的整数,表示一个学生的得分。
    • 输出格式 :
      输出三行。
      第一行包含一个整数,表示最高分。
      第二行包含一个整数,表示最低分。
      第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
    • 样例输入:
      7
      80
      92
      56
      74
      88
      99
      10
    • 样例输出:
      99
      10
      71.29

    具体代码:

    def avg(list,sum):
        return sum/len(list)
    n=int(input())
    arr=[]
    for i in range(n):
        arr.append(int(input()))
    # print(arr)
    sum=sum(arr)
    print(max(arr))
    print(min(arr))
    print('%.2f'%avg(arr,sum))
    

    运行结果
    在这里插入图片描述

    8.成绩统计

    • 问题描述:
      小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。
      如果得分至少是60分,则称为及格。如果得分至少为85分,则称为优秀。
      请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
    • 输入格式 :输入的第一行包含一个整数 ,n表示考试人数。
      接下来 n行,每行包含一个0至100的整数,表示一个学生的得分。
    • 输出格式 :输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
    • 样例输入:
      7
      80
      92
      56
      74
      88
      100
      0
    • 样例输出:
      71%
      43%

    具体代码:

    def cout(arr):
        sum_excellent=0
        sum_fail=0
        for i in range(n):
            if arr[i]<60 :
                sum_fail+=1
            if arr[i]>=85:
                sum_excellent+=1
        return sum_fail,sum_excellent
    
    if __name__ == '__main__':
        import math
        n=int(input())
        arr=[]
        for i in range(n):
            arr.append(int(input()))
        a,b=cout(arr)
        # print(int((1-a/n)*100),'%',sep='')
        # print(int((b/n)*100),'%',sep='')
        # Math.floor(x) // 返回小于x的最大整数 Math.ceil(x) // 返回大于x的最小整数 Math.round()   返回四舍五入后的整数
        print('{}%'.format(round((1-a/n)*100)))
        print('{}%'.format(round((b/n) * 100)))
    

    运行结果
    ![在这

    9.回文日期

    • 问题描述:

    • 输入格式
      在这里插入图片描述

    • 输出格式 :在这里插入图片描述

    • 样例输入:20200202

    • 样例输出:
      20211202
      21211212

    具体代码:

    def is_hui(x):
        x=str(x)
        if x==x[::-1]:
            return True
        else:
            return False
    def is_run(x):
        if (x%4==0 and x%100!=0) or x%400==0:
            return True
        else:
            return False
    def is_AB(x):
        x=str(x)
        if (x[0]==x[2]==x[5]==x[7]) and (x[1]==x[3]==x[4]==x[6]):
            return True
        else:
            return False
    
    n=input()
    year=int(n[0:4])
    month=int(n[4:6])
    day=int(n[6:])
    # print(year,month,day)
    i=1
    flag=True
    result=[]
    result1=[]
    while flag:
        day+=1
        if day==32 and month==12: # 年份+1的情况
            month=1
            day=1
            year+=1
            # print(year,month,day)
        if (day==32 and (month==1 or month==3 or month==5 or month==7 or month==8 or month==10)): # 奇数月+1的情况
            day=1
            month+=1
        if (day==31 and (month==4 or month==6 or month==9 or month==11)): # 偶数月+1的情况
            day=1
            month+=1
        if (day==30 and month==2 and is_run(year)): # 是闰年2月的情况
            day=1
            month+=1
        if (day==29 and month==2 and is_run(year)!=True): # 不是闰年2月的情况
            day=1
            month+=1
        # if month==0:
        #     month+=1
        num=year*10000+month*100+day
        if is_hui(num):
            result.append(num)
            if is_AB(num):
                result1.append(num)
                break
    
        # print(i)
    # print(result)
    print(result[0])
    print(result1[0])
    

    运行结果:
    在这里插入图片描述

    10.数字三角形

    • 问题描述:
      在这里插入图片描述

    • 输入格式
      在这里插入图片描述

    • 输出格式 :输出一个整数,表示答案。

    • 样例输入:
      5
      7
      3 8
      8 1 0
      2 7 4 4
      4 5 2 6 5

    • 样例输出:27

    具体代码:

    def DigitalTriangle():
        import copy
        n = int(input())
        arrs=[]
        for i in range(n):
            arrs.append(list(map(int,input().split())))
    
        temp_list = copy.deepcopy(arrs)  # 这里的temp_list实际存储的是左下和右下路径长度
        # print(temp_list)
        for i in range(1, n):
            for j in range(i):
                # print(i,'****',j)
                temp_list[i][j]=max(temp_list[i-1][j],temp_list[i-1][j-1])+arrs[i][j]
                #print(temp_list)
        if n%2==1:
            print(temp_list[n-1][int(n/2)])
        else:
            if temp_list[n-1][n//2] > temp_list[n-1][n//2-1]:
                print(temp_list[n-1][n//2])
            else:
                print(temp_list[n - 1][n // 2]-1)
    
    
    DigitalTriangle()
    

    运行结果:
    在这里插入图片描述

    11.回文数字

    • 问题描述:
      在这里插入图片描述
    • 输入格式在这里插入图片描述
    • 输出格式 :输出一个整数,表示答案。
    • 样例输入:44
    • 样例输出:
      99899
      499994
      589985
      598895
      679976
      688886
      697796
      769967
      778877
      787787
      796697
      859958
      868868
      877778
      886688
      895598
      949949
      958859
      967769
      976679
      985589
      994499

    具体代码:

    def is_hui(x):
        x=str(x)
        if x==x[::-1]:
            return True
        else:
            return False
    def sum_hui(x):
        x=str(x)
        sum=0
        for i in range(len(x)):
            sum+=int(x[i])
            # print(sum)
        return sum
    n=int(input())
    if n>54: # t通过上面的sum可以看到最大的n为54
        print(-1)
    else:
        for i in range(10000,1000000):
            if is_hui(i):
                if sum_hui(i)==n:
                    print(i)
    

    运行结果:
    在这里插入图片描述

    12.日期问题

    • 问题描述:在这里插入图片描述
    • 输入格式 :一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)
    • 输出格式 :输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。
    • 样例输入:02/03/04
    • 样例输出:
      2002-03-04
      2004-02-03
      2004-03-02

    具体代码:

    def is_run(x):
        if (x%4==0 and x%100!=0) or x%400==0:
            return True
        else:
            return False
    def default(x,y,z):
        # 这些日期都在1960年1月1日至2059年12月31日。
        if x>=0 and x<=59:
            x+=2000
        elif x>=60 and x<=99:
            x+=1900
        # 月份小于0或者大于12的排除
        if y<=0 or y>12:
            return False
        # 天数小于0或者大于31的排除
        if z<=0 or z>31:
            return False
        if is_run(x) and y==2 and z>29: # 闰年2月为29天
            return False
        if is_run(x)==False and y==2 and z>28: # 闰年2月为28天
            return False
        if (y==4 or y==6 or y==9 or y==11) and z>30:
            return False
        if (y==1 or y==3 or y==5 or y==7 or y==8 or y==12) and z>31:
            return False
        else:
            if y<10:
                y=str(0)+str(y)
            if z<10:
                z=str(0)+str(z)
            arr.append(str(x) + '-' + str(y) + '-' + str(z))
            return
    
    
    n=input()
    year=int(n[0:2])
    month=int(n[3:5])
    day=int(n[6:9])
    
    
    arr=[]
    x11,y11,z11=0,0,0
    x21,y21,z21=0,0,0
    x31,y31,z31=0,0,0
    if year==4:
        default(year,month,day)
        default(day,month,year)
        default(day,year,month)
    
        # set 有去重复的功能
        """
        aa = [1,2,2,3,3,2,7,8,9]
        print(len(set(aa)))
        """
        for i in range(len(set(arr))):
            print(arr[i])
    else:
        default(day, month, year)
        default(year, month, day)
        default(day, year, month)
        for i in range(len(set(arr))):
            print(arr[i])
    

    运行结果:
    在这里插入图片描述

    展开全文
  • a=int(input("请输入一个数:")) b=int(input("请输入另一个数:")) sum=a+b print(sum)
  • 蓝桥杯基础练习 Python实现杨辉三角形 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。  下面给出了杨辉三角形的前4...
  • 蓝桥杯基础练习Python版答案解析

    千次阅读 2020-02-06 21:17:44
    蓝桥杯基础练习Python版答案样例代码 有几个没做出来附上没做出来的图片 下面附上代码 代码不完美,没什么注释sorry了各位,讲究看吧 `在这里插入代码’’‘import math#圆的面积 def mianji(n): s=math.pinn #...
  • 文章目录一:实现Fibonacci数列二:圆的面积三:序列求和四:A+B问题 一:实现Fibonacci数列 Fibonacci数列:0,1,1,2,3,5,8,13。。。。 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1 ...
  • 蓝桥杯基础练习–14 python 闰年判断 问题描述 给定一个年份,判断这一年是不是闰年 当以下情况之一满足时,这一年是闰年 年份是4的倍数而不是100的倍数 年份是400的倍数 其他的年份都不是闰年。 输入格式 输入...
  • """矩形面积交""" list1=list(map(float,input().split())) list2=list(map(float,input().split())) area = 0 x1 = max(min(list1[0],list1[2]),min(list2[0],list2[2])) y1 = max(min(list1[1],list1[3]),min(list...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,321
精华内容 528
关键字:

蓝桥杯练习题python

python 订阅