一.蓝桥杯基础训练
1.字母图形
问题描述: 利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
#字母图形
try:
s='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n,m=input().split()
a=s[0:eval(m)]
for i in range(1,eval(n)+1):
print(a)
a=s[i]+a[0:-1]
except:
pass
2.Fibonacci数列
问题描述: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
#斐波那契
n=int(input())
f1,f2=1,1
for i in range(3,n+1):
f1,f2=f2%10007,(f1+f2)%10007
print(f2)
3.字串
问题描述: 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
#字串
for i in range(32):
a='{:0>5b}'.format(i)
print(a)
4.圆的面积
问题描述: 给定圆的半径r,求圆的面积。
#圆的面积
import math
r=int(input())
m=math.pi*(r**2)
print('{:.7f}'.format(m))
5.序列求和
问题描述: 求1+2+3+…+n的值。
#序列求和
def s():
sum = 0
n= int(input())
sum=n*(1+n)
print(sum)
s()
二.蓝桥杯算法训练
1.寻找数组中的最大值
问题描述: 对于给定整数数组a[],寻找其中最大值,并返回下标。
#寻找数组中的最大数
try:
n=int(input())
m=input().split()
print(max(m),m.index(max(m)))
except:
pass
2.区间k大数查询
问题描述: 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
#区间k大数查询
def main():
n=int(input())
n1=list(map(int,input().split()))
#转化成int型
a=[]
m=int(input())
for i in range(m):
l,r,K=map(int,input().split())
#转化成int型
lst=n1[l-1:r]
lst.sort()
#排序
a.append(lst[-K])
#列表中添加元素
for result in a:
print(result)
main()
3.最大最小公倍数
问题描述: 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
##最大最小公倍数
n=int(input())
if(n%2==0):
if(n%3==0):
print((n-3)*(n-2)*(n-1))
else:
print(n*(n-1)*(n-3))
else:
print(n*(n-1)*(n-2))
4.Torry的困惑
问题描述: Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
##Torry的困惑
try:
def get(num): # 判断一个数字是不是质数
for i in range(2, num):
if num % i == 0:
return False
else:
return True
def put(n): # 输出n个质数
num = 2
#num 是当前判断的数,不管是不是质数,判断完了之后num自加1,接着往下判断
for j in range(1, n + 1):
while True:
if get(num):
result.append(num)
num += 1
break
else:
num += 1
n = int(input())
result = []
a = 1
put(n)
for i in result:
a *= i
print(a % 50000)
except:
pass
5.最小乘积(基本型)
问题描述: 给两组数,各n个。 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。例如两组数分别为:1 3 -5和-2 4 1,那么对应乘积取和的最小值应为:(-5) * 4 + 3 * (-2) + 1 * 1 = -25
##最小乘积
T=int(input())
for i in range(T):
n = int(input())
##sorted()函数对一个列表进行排序,并不改变原始值的顺序
a1=sorted(list(map(int,input().split())),reverse=False)
##reverse=False代表升序
a2=sorted(list(map(int,input().split())),reverse=True)
##reverse=True代表降序
sum=0
for j in range(n):
sum+=a1[j]*a2[j]
print(sum)
6.Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。 输入格式:输入有两行,分别为两个单词。 输出格式:输出只有一个字母Y或N,分别表示Yes和No。 输入输出样例
##Anagram问题
n=input().lower()
m=input().lower()
if len(n) == len(m):
dic_n = {}
for i in n:
if i in dic_n:
dic_n[i]+=1
else:
dic_n[i] = 1
dic_m = {}
for j in m:
if j in dic_m:
dic_m[j]+=1
else:
dic_m[j] = 1
fl = "N"
for z,num in dic_n.items():
if num != dic_m.get(z,-1):
break
else:
fl = "Y"
print(fl)
else:
print("N")
|