蓝桥杯-练习题目(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))
矩形面积交
原文地址:https://www.cnblogs.com/xiao-yu-/p/14363298.html