zoukankan      html  css  js  c++  java
  • 蓝桥杯-练习题目(1-20)

    1.题目1:输入A、B,输出A+B。

    #input: 12 45
    #output:57
    
    c = input().split() #将输入以空格为分隔符返回一个字符串列表
    a,b = map(int,c)
    sum1 = a + b
    print(sum1)
    求和

    2.题目2:求1+2+3+...+n的值。

    #input:4
    #output:10
    print(sum(range(1,int(input()) + 1)))
    求和

    3.题目3:给定圆的半径r,求圆的面积。

    #input:4
    #output:50.2654825
    
    import math
    print(round(math.pi*float(input())**2,7))
    求圆的面积

    4.题目4:

    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

    当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

    #input:10
    #output:55
    import numpy as np
    n = int(input())
    a = np.zeros((1,n),dtype = "int")
    a[0][0] = 1
    
    for i in range(1,n):
        a[0][i] = a[0][i-1] + a[0][i-2]
    print(a[0][n-1]%10007)
    
    '''
    def fei(n):
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            return fei(n-1)%10007 + fei (n-2)%10007
    
    n = int(input())#项数
    print(fei(n))
    '''
    Fibonacci

    5.题目5:

    给定一个年份,判断这一年是不是闰年。

    当以下情况之一满足时,这一年是闰年:

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

    2. 年份是400的倍数。

    其他的年份都不是闰年。

    #input:2013
    #output:no
    
    year = int(input())
    if (year>=1990 and year<=2050) and (year%400 == 0 or (year%4 == 0 and year%100 !=0)):
        print("yes")
    elif year<1990 or year>2050:
        print("输入错误")
    else:
        print("no")
    闰年判断

    6.题目6:

    对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

    00000

    00001

    00010

    00011

    00100

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

    for i in range(32):
        print("{:05b}".format(i,'b'))
    5位2进制

    7.题目7:

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

    ABCDEFG

    BABCDEF

    CBABCDE

    DCBABCD

    EDCBABC

    这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

    #input:5 7
    #output:
    '''
    ABCDEFG
    BABCDEF
    CBABCDE
    DCBABCD
    EDCBABC
    '''
    m, n = map(int, input().split())
    letters = ''
    # 1.产生所有字母
    for i in range(26):
        letters += chr(ord("A") + i)
    
    # 2. 产生第一行代码
    x = letters[:n]
    for i in range(1,m+1):
        try:
            print(x)
            x = letters[i] + x[0:n-1]
        except:
            pass
    
    '''
    try:
        n, m = map(int, input().split())
        letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        x = letter[:m]
        for i in range(1, n + 1):
            print(x)
            x = letter[i] + x[0:-1]
    except:
        pass
    
    #本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/xiaolan-Lin 欢迎各位转载,
    #未经作者本人同意转载文章时,必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
    
    '''
    
    
    '''
    import numpy as np
    m,n = map(int,input().split())
    
    #输入原始矩阵
    mx = np.ones((m,n),dtype="str")
    print(mx)
    
    #产生所有字母的列表
    letters = []
    for i in range(26):
        letters.append(chr(ord("A") + i))
    # print(ord("A"))#65 某个字符串对应的ascii码;chr ascii码转字符串
    '''
    字母图形

    8.题目8:

    给出n个数,找出这n个数的最大值,最小值,和。

    第一行为整数n,表示数的个数。

    第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。

    输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。

    #input:5
    #         1 3 -2 4 5
    #output:
    #5
    #-2
    #11
    
    # 给出n个数,找出这n个数的最大值,最小值,和。
    n = int(input()) #几个数
    a = input().split() #注意不能直接将列表转换类型
    a = [int(i) for i in a]
    
    #>>> input().split()
    #4 5 6
    #['4', '5', '6']
    #>>>
    
    print(max(a))
    print(min(a))
    print(sum(a))
    数列特征

     9.题目9:

    给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

    第一行包含一个整数n。

    第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

    第三行包含一个整数a,为待查找的数。

    如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。

    #input:
    #6
    #1 9 4 8 3 9
    #9
    #output:
    #2
    
    n = int(input()) # 几个数
    a = input().split() 
    a = [int(i) for i in a] # 输入的列表
    b = int(input()) # 待查找的数
    try:
        print(a.index(b) + 1) #待查找数的下标,加一代表位置
    except:
        print(-1)
    列表查找

    10.题目10:

    杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

    它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

    下面给出了杨辉三角形的前4行: 

    1 

    1 1  

    1 2 1 

    1 3 3 1

    给出n,输出它的前n行。

    #input:4
    #output:
    #1
    #1 1
    #1 2 1
    #1 3 3 1
    
    #思想:列表相加 + 观察
    n = int(input())
    
    def yanghui(p):
        p = [1] +  [p[i] + p[i+1] for i in range(len(p) - 1)] + [1]
        return p
    
    #1.将每一行输出一个列表
    p = [1]
    #print(p)
    p_s = []
    for i in range(n):
        p_s.append(p)
        p = yanghui(p)
        #p.append(0) #增加一个元素,因为下一行比上一行多一个,#不用了,上面p迭代呢
        #print(p)
    
    #2.输出
    for i in p_s:
        #print(i)
        #将列表元素这样输出:1 3 3 1
        for j in i:
            print(j,end=' ')
        print("	") #回车不换行
    杨辉三角
    #关键:后面一行除了前面和后面的1,中间的数是前面一行数的滑动两个数的和
    
    #1.产生杨辉三角
    n = int(input())
    begin = [[1],[1,1]]
    
    for i in range(n-2):#因为前面两个要加的数字是空的
        newend = begin[-1]
        new = [1]
        new = new + [newend[j]+newend[j+1] for j in range(len(newend) - 1)] + [1]
        begin.append(new)
    a = str(begin)[1:-1]
    
    #2.格式化字符串
    import re
    b = re.split(r'], ',a) # 分开每一个
    c = [i + ']' for i in b[:]] # 加右括号
    d = [] #将[]都去掉,之后将,转换为空格
    for i in range(len(c)):
        if i == len(c)-1:
            e = c[i][1:-2]
        else:
            e = c[i][1:-1]
        f = e.replace(',',' ') # str.replace(old, new[, max])
        d.append(f)
    #print(d)
    
    #3.输出
    h = n + 2*(n -1) #最后一行的长度
    for i in d:
        s = ' '*((h-len(i))//2)
        print(s + i + s)
    
    '''
    #3.输出(最后一行是n + n-1个长度)
    h = n + 2*(n -1)
    for i in d:
        print('{:^hs}'.format(i))
    #精度保存时候是不能作为变量修改的
    '''
        
    
    
    
        
    杨辉三角2

    11.题目11:

    153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。

    #按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
    
    #153是一个非常特殊的数,它等于它的每位数字的立方和,
    #即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
    
    for i in range(100,1000):
        gewei = i%10
        shiwei = (i//10)%10
        baiwei = (i//100)%10
        if i == gewei**3 + shiwei**3 + baiwei**3:
            print(i)
    特殊数字

    12.题目12:

    1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

    #按从小到大的顺序输出满足条件的四位十进制数。
    for i in range(10000):
        gewei = i%10
        shiwei = (i//10)%10
        baiwei = (i//100)%10
        qianwei = (i//1000)%10
        if qianwei == 0:
            continue   
        elif gewei == qianwei and shiwei == baiwei:
            print(i)
            
    回文数

    13.题目13:

    123321是一个非常特殊的数,它从左边读和从右边读是一样的。
    输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

    输入一行,包含一个正整数n。

    按从小到大的顺序输出满足条件的整数,每个整数占一行。

    #input:52
    #output:
    #899998
    #989989
    #998899
    
    num1 = int(input())
    
    for i in range(10000,999999):
        gewei = i%10
        shiwei = (i//10)%10
        baiwei = (i//100)%10
        qianwei = (i//1000)%10
        wanwei = (i//10000)%10
        shiwanwei = (i//100000)%10
    
        sum1 = gewei + shiwei + baiwei + qianwei + wanwei + shiwanwei
        tiaojian1 = (shiwanwei==0 and wanwei==gewei and shiwei==qianwei and num1==sum1)#5位数
        tiaojian2 = (shiwanwei==gewei and shiwei==wanwei and baiwei==qianwei and num1==sum1)#6位数
        if tiaojian1 or tiaojian2:
            print(i,end=" ")
            print("	")
    特殊回文数

    14.题目14:

    (1)给出一个非负整数,将它表示成十六进制的形式。

    (2)从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

    (3)给定n个十六进制正整数,输出它们对应的八进制数。

      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

      输出n行,每行为输入对应的八进制正整数。

    #给出一个非负整数,将它表示成十六进制的形式。
    #10进制转16进制:hex(n)  将10进制整数转换成16进制,以字符串形式表示。
    #10进制转8进制oct(n)
    #10进制转二进制:bin(n)
    #8进制转16进制:hex(int(n,8))
    #8进制转换成10进制:int(n,8)
    #8进制转换成2进制:bin(int(n,8))
    #2进制转换成16进制:hex(int(n,2))
    #2进制转换成8进制:oct(int(n,2))
    #2进制转换成10进制:int(n,2)
    
    #30 1E 10进制转16进制
    #n = int(input())
    #s = hex(n)[2:]
    #print(s.upper()) 
    
    '''
    str = "www.runoob.com"
    print(str.upper())          # 把所有字符中的小写字母转换成大写字母
    print(str.lower())          # 把所有字符中的大写字母转换成小写字母
    print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
    print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写 
    '''
    
    #16进制转10进制 FFFF 65535
    #a = input() 
    #a = '0x' + a
    #print(int(a,16)) #注意:int最终输出为10进制
    
    #16进制转8进制
    n = int(input()) #想要转换的数的个数
    l1 = [] #存储要输出的转换后的8进制字符串
    for i in range(n):
        a = input() #接收转换的数
        a = '0x' + a
        b = int(a,16) #16进制对应的10进制数
        s = oct(b)[2:]
        l1.append(s)
    
    #输出:
    for i in l1:
        print(i)
    进制转换

    15.问题15(这个的知道内存的知识):

    给定一个长度为n的数列,将这个数列按从小到大的顺序排列。

    第一行为一个整数n。
    第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

    输出一行,按从小到大的顺序输出排序后的数列。

    5
    8 3 6 4 9

    3 4 6 8 9

    n = int(input()) #列表的长度
    l1 = input().split()#接收传入的数字,转为列表
    l1 = [int(i) for i in l1]
    #print(l1)
    #list.sort(cmp=None, key=None, reverse=False)
    '''
    l1ed = l1.sort()
    print(id(l1ed),id(l1.sort()),id(l1))
    print(l1ed)
    #这块的话:l1ed指向那个l1排序后的那个空间,
    #而sort的话是在原内存上面进行的,那边是空的
    
    #list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,
    #而不是在原来的基础上进行的操作。
    '''
    l1.sort()
    
    for i in l1:
        print(i,end = ' ')
    数列排序

     16. 题目16:时间转换,将秒换为时分秒的形式

    #eg: input:3661   #(t最大为86399,其 < 60**3)
    #output: 1:1:1
    
    t = int(input())
    
    shi = 0
    fen = 0
    miao = 0
    
    if t < 60:
        miao = t  
    elif t < 60**2:
        fen = t//60
        miao = t - fen*60
    else:
        shi = t//(60**2)
        fen = (t - shi*3600)//60
        miao = t - shi*3600 - fen*60
    
    print(str(shi) + ":" + str(fen) + ":" + str(miao))
    时间转换

    17. 题目17:

    #给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
    #1:两个字符串长度不等。比如 Beijing 和 Hebei
    #2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
    #3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
    #4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
    #编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。

    '''
    print(str.upper())          # 把所有字符中的小写字母转换成大写字母
    print(str.lower())          # 把所有字符中的大写字母转换成小写字母
    print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
    print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写 
    '''
    s1 = input()
    s2 = input()
    if len(s1) != len(s2):
        print(1)
    elif s1 == s2:
        print(2)
    elif s1 != s2 and s1.upper() == s2.upper():
        print(3)
    else:
        print(4)
    字符串判断

    18.题目18:

    因式分解:输入范围[a b],输出其中所有数字的因式分解。

    3 10
    3=3
    4=2*2
    5=5
    6=2*3
    7=7
    8=2*2*2
    9=3*3
    10=2*5

    #str = "-";
    #seq = ("a", "b", "c")
    #print(str.join( seq )) #a-b-c
    
    a, b = map(int, input().split())
    for num in range(a,b+1):
        e = num #备份num
        m = [] #用来存储各个分式
        
        while e != 1:
            for i in range(2,num+1):
                if e%i == 0:
                    m.append(str(i))
                    e //= i
                    break
                #因为例如4 = 2*2,试了2之后还要试2
        print("{}=".format(num),end="")
        print("*".join(m))
        
    #原文地址:https://blog.csdn.net/weixin_43937790/article/details/105024479
    因式分解

     19.题目19(这个测试数据是正确的,但是我真不知道问题出在哪里):

    给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
      例如:
      A =
      1 2
      3 4
      A的2次幂
      7 10
      15 22

    输入格式
      第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
      接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
    输出格式
      输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
    import numpy as np
    
    m,n = map(int,input().split())# m阶矩阵,n次幂
    mx = np.zeros((m,m),dtype="int") #存储矩阵元素
    
    i = 0 #遍历每一行时候的指针
    mx_row_str = [] #存储矩阵元素每一行的字符串形式
    mx_row_int = [] #存储矩阵元素每一行的数字形式
    
    #1.循环写入矩阵
    while i < m:
        mx_row_str = input().split()
        mx_row_int = [int(j) for j in mx_row_str]
        mx[i] = mx_row_int
        i += 1
    
    #2.将array转为mat(矩阵)形式,因为矩阵有运算
    mx = np.mat(mx)
    mx_out = mx**n
    #print(mx_out)
    
    #3.输出为指定格式
    mx_out = mx_out.tolist()
    
    #这个输出格式这块注意一下
    for i in mx_out:
        for j in i:
            print(j,end = ' ')
        print("	")
    #print(mx_out)
    
        
        
    矩阵的幂

    20.题目20:

    问题描述
      平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
    输入格式
      输入仅包含两行,每行描述一个矩形。
      在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
    输出格式
      输出仅包含一个实数,为交的面积,保留到小数后两位。
    #原文链接:https://www.pythonf.cn/read/12682
    #用个list转换就可以:
    s1 = list(map(float, input().split()))
    s2 = list(map(float, input().split()))
    
    if s1[0] > s1[2]:
        s1[0],s2[2] = s1[2],s1[0] #交换x轴
    if s1[1] > s1[3]:
        s1[1],s2[3] = s1[3],s1[1] #交换y轴
        
    if s2[0] > s2[2]:
        s2[0],s2[2] = s2[2],s2[0] #交换x轴
    if s1[1] > s1[3]:
        s2[1],s2[3] = s2[3],s2[1] #交换y轴
    
    #print(s1,s2)
    temp_x1 = max(s1[0],s2[0]) #中间矩形的横坐标(左)
    temp_y1 = max(s1[1],s2[1])
    
    temp_x2 = min(s1[2],s2[2]) #中间矩形的横坐标(右)
    temp_y2 = min(s1[3],s2[3])
    
    if temp_x1 > temp_x2 or temp_y2 < temp_y1:
        r = 0
    else:
        r =  abs(temp_x1-temp_x2)*abs(temp_y1-temp_y2)
    print("{:.2f}".format(r))
    矩形面积交
  • 相关阅读:
    QQ网页强制聊天,微博一键关注
    webpack(2) 安装和使用
    webpack(1) 为什么要用构建工具
    babel来进行js转换
    less实用语法
    elasticsearch笔记(8)聚合查询
    elasticsearch笔记(7) 复合查询_boolean查询 boolsting查询 filter查询
    elasticsearch笔记(6) 删除文档delete-by-query
    elasticsearch笔记(5) java操作es的查询_04深分页scroll查询
    elasticsearch笔记(4) java操作es的查询_04----- prefix查询 fuzzy查询 wildcard查询 range查询 regexp查询
  • 原文地址:https://www.cnblogs.com/xiao-yu-/p/14363298.html
Copyright © 2011-2022 走看看