概述
python基础试题 (蓝桥杯省赛试题)
- 1
- 1.1 Fibonacci数列题
- 1.2 圆的面积
- 1.3 序列求和
- 1.4 A+B问题
- 2
- 2.1 数列排序
- 2.2 进制转化
- 十六进制转八进制
- 十六进制转十进制
- 十进制转十六进制
- 2.3 特殊回文数
- 四位数回文数
- 2.4 水仙花数
- 2.5 杨辉三角
- 2.6 查找整数
- 2.7 数列特征
- 2.8 字母图形
- 2.9 字串01
- 2.10 闰年判断
# 根据CSDN其他还有官网中的试题,进行练习,其中编写的试题代码也包括了自己的想法和思路,供大家参考,希望能跟大家多多交流,欢迎纠正。
1
1.1 Fibonacci数列题
-
问题描述:
-
Fibonacci数列的递推公式为:
Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大。
现在我们想知道,Fn除以10007的余数是多少。
输入描述:(输入格式输入包含一个整数n)
-
n
输出描述:(输出格式输出一行,包含一个整数)
-
表示Fn除以10007的余数
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 数据规模与约定1 <= n <= 1,000,000。
# 1.1 Fibonacci数列
n = int(input("输入包含一个整数:"))
# n = 10
fib = [1 for i in range(n+1)]
k = 3
while k <= n:
fib[k] = (fib[k-1] +fib[k-2]) % 10007
k += 1
print("第", n, "的数列除以10007余数为", fib[n])
1.2 圆的面积
-
问题描述:
- 给定圆的半径r,求圆的面积。
输入描述:(输入包含一个整数r)
-
表示圆的半径 如:
4
输出描述:(输出一行包含一个实数,四舍五入保留小数点后7位)
-
表示圆的面积 如:
50.2654825
数据规模与约定: 1 <= r <= 10000
# 1.2 圆的面积
import math
r = int(input("输入圆的半径:"))
s = math.pi * r * r
print("{:.7f}".format(s))
1.3 序列求和
-
问题描述:
- 求1+2+3+…+n的值。
输入描述:(输入包含一个整数n)
-
4
输出描述:(输出一行包括一个整数,表示1+2+3+…+n的值)
-
10
数据规模与约定: 1 <=n <= 1,000,000,000
# 1.3 序列求和
n = int(input("输入一个整数: "))
s = n * (n + 1) / 2 # 等差数列公式
print("序列和为: %d" %s)
1.4 A+B问题
-
问题描述:
- 输入A、B,输出A+B。
输入描述:(输入的第一行包括两个整数,由空格分隔,分别表示A、B)
-
12 45
输出描述:(输出一行包括一个整数,表示表示A+B的值)
-
57
数据规模与约定: -10000 <= A, B <= 10000
# 1.4 A+B问题
#只适用于数据规模较小的情况下。若过大,则通过大数加法计算
a, b = map(int, input("输入两个整数").split())
print(a+b)
2
2.1 数列排序
-
问题描述:
-
给定一个长度为n的数列,
将这个数列按从小到大的顺序排列。1<=n<=200
输入描述:
(第一行为一个整数n)
(第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000)
-
5
8 3 6 4 9
输出描述:(输出一行,按从小到大的顺序输出排序后的数列)
-
3 4 6 8 9
# 2.1 数列排序 (即输入的第二行整数以空格间隔)
# 方法一:
n = int(input("输入数列长度: "))
num = list(map(int, input("输入待排序整数,整数的绝对值小于10000:").split()))
num.sort() #None是不可迭代的 或者sorted(num)
print(" ".join("{:d}".format(i) for i in num ))
# 方法二:
num = input("输入待排序整数,整数的绝对值小于10000:").split()
num = sorted(num) #list类型
print(" ".join(num[:n]))
2.2 进制转化
十六进制转八进制
-
问题描述:
- 给定n个十六进制正整数, 输出它们对应的八进制数
输入描述:
(输入的第一行为一个正整数n(1<=n<=10))
(接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000)
-
2
39
123ABC
输出描述:(输出n行,每行为输入对应的八进制正整数)
-
71
4435274
【注意】输入的十六进制数不会有前导0,比如012A
输出的八进制数也不能有前导0
n = int(input("输入需转换的行数: "))
for i in range(1,n+1):
print("第", i, "行")
m = input("输入十六进制正整数: ")
ans = format(int(m, 16), 'o')
print(ans)
#十六进制转二进制
ans = format(int(m, 16), 'b')
十六进制转十进制
-
问题描述:
-
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示
输入描述:
-
FFFF
输出描述:
-
65535
#十六进制转十进制
print(int(input("输入十六进制正整数: "), 16))
十进制转十六进制
-
问题描述:
-
十六进制数是在程序设计时经常要使用到的一种整数的表示方式. 它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
共16个符号,分别表示十进制数的0至15。
十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。给出一个非负整数,将它表示成十六进制的形式
输入描述: (输入包含一个非负整数a,表示要转换的数,0<=a<=2147483647)
-
30
输出描述:(输出这个整数的16进制表示)
-
1E
#十进制转十六进制
print(format(int(input("输入十进制正整数: ")), 'X'))
2.3 特殊回文数
-
问题描述:
- 123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n
输入描述:(输入的第一行包含一个正整数n)
-
52
输出描述:(输出按从小到大的顺序输出满足条件的整数,每个整数占一行)
-
899998
989989
998899
数据规模与约定: 1<=n<=54
# 2.3 特殊回文数
#方法一:
n = int(input("输入需得到回文数之和的整数: "))
#先判断是否为回文数 (方法一:特点按顺序:从10000,10001,10002,...,999999)
for i in range(10000, 1000000):
num_pd = str(i) #回文数
if num_pd == num_pd[::-1]:
sum_pd = 0
#在单独求各个 位数字之和
for j in num_pd:
sum_pd += int(j)
if sum_pd == n:
print(num_pd)
#方法二:按照回文数顺序遍历,如:10001,20002,...,999999)
my_list = []
for i in range(100, 1000):
num_pd_half = str(i) #回文数的前半部分,复制,对称处理 ,从而减少运算
#回文数是五位数
if sum(map(int, num_pd_half + num_pd_half[:2][::-1])) == n: #三位数 + 三位数的前2位数 倒序
my_list.append(num_pd_half + num_pd_half[::-1])
#回文数是六位数
if sum(map(int, num_pd_half + num_pd_half[::-1])) == n: #三位数 + 三位数的倒序
my_list.append(num_pd_half + num_pd_half[::-1])
for i in sorted(map(int, my_list)):
print(i)
#方法三:
# ***** 绝绝子方法 *****
n = int(input())
for i in range(10000, 1000000):
num_pd = str(i) #可能出现的回文数
#符合正序与倒序相等,同时将字符串以 + 分割并以eval()转化为表达式进行求值
if num_pd == num_pd[::-1] and eval('+'.join(num_pd)) == n:
#eval:***转化为有效的表达式 或 complie函数的代码对象(其可以创建函数compile(表达式,'','编译代码'))
print(i)
四位数回文数
-
问题描述:
-
正着数和倒着数都一样,输出所有的这样的四位数
如 1221
#输出四位数的回文
# import time
# start = time.time()
num_list = []
for i in range(10, 101): #两位数
num_list.append(str(i) + str(i)[::-1]) #两位数 + 两位数的倒序
for l in map(int, num_list):
print(l)
# print(time.time()-start)
2.4 水仙花数
-
问题描述:
-
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。
编程求所有满足这种条件的三位十进制数
输出描述:(按从小到大的顺序输出满足条件的三位十进制数,每个数占一行)
# 2.4 水仙花数
for i in range(100, 1000):
# 个位十位百位数 各个立方,相加之和
num_sum = int(str(i)[0]) ** 3 + int(str(i)[1]) ** 3 + int(str(i)[2]) ** 3
if num_sum == i:
print(i)
2.5 杨辉三角
-
问题描述:
-
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行
输入描述:(输入包含一个数n)
-
4
输出描述:(输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格)
-
1
1 1
1 2 1
1 3 3 1
数据规模与约定: 1 <= n <= 34
# 2.5 杨辉三角
n = int(input("输入行数:"))
old_line = [1] #打印第一列 1
print(' '.join(str(i) for i in old_line))
for i in range(1, n): #打印第一列之后,第二列开始(从[1,1]开始)
new_line = [] #创建新列表
for j in range(len(old_line)-1): #打印第二列之后,第三列开始(从[1,2,1]开始)
new_line.append(old_line[j] + old_line[j+1]) #添加的数据,(从[1]+[1]: 1+1 = 2开始)
# 添加新列表中的参数 *表示:将列表解开成多个独立的参数
new_line = [1, *new_line, 1]
print(' '.join(str(i) for i in new_line))
2.6 查找整数
-
问题描述:
- 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个
输入描述:
(第一行包含一个整数n)
(第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000)
(第三行包含一个整数a,为待查找的数)
-
6
1 9 4 8 3 9
9
输出描述:(输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格)
-
2
数据规模与约定: 1 <= n <= 1000
# 2.6 查找整数, 输入含有n个整数的数列a,搜索整数m在a数列中的数量
n = int(input("输入数列中整数的数量: "))
a = input("输入数列: ").split()
m = input("输入待查的整数: ")
num = 0
##方法缺n值
for j in range(n):
if a[j] == str(m): #按顺序搜索数列中的整数
num += 1
if num == 0:
print(-1)
else:
print("出现的次数为: ", num)
2.7 数列特征
-
问题描述:
- 给出n个数,找出这n个数的最大值,最小值,和
输入描述:
(第一行为整数n,表示数的个数)
(第二行有n个数,为给定的n个数,每个数的绝对值都小于10000)
-
5
1 3 -2 4 5
输出描述:(输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和)
-
5
-2
11
数据规模与约定: 1 <= n <= 1000
# 2.7 数列特征
n = int(input("输入整数的个数: "))
m = input("输入数列: ").split()
# max(),min()函数,对于列表取最大/小的数字,
# 对于字符串取最大/小的字母(如:"1,2,3" --> 逗号最小), 其他的与字符串同理
if n == len(m):
print("最大数值为:", max(m)) #求最大数值
print("最小数值为:", min(m)) #求最小数值
print("最小值为:", eval("+".join(m))) #求和
2.8 字母图形
-
问题描述:
-
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形
输入描述:(输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数)
-
5 7
输出描述:(输出n行,每个m个字符,为你的图形)
-
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定: 1 <= n, m <= 26
# 2.8 字母图形
try:
n, m = map(int, input("请输入需输出的行数 、列数: ").split())
letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
output = letter[:m] #初始为m列的第一行列表
for i in range(1, n+1):
print(output)
output = letter[i] + output[:-1] #重新赋值第二列列表之后的数列
#为字母表第n个为字母列的首字母 + 前一行除最后一位数的字母列
except:
pass
2.9 字串01
-
问题描述:
-
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串
输出描述:(输出32行,按从小到大的顺序每行一个长度为5的01串)
-
00000
00001
00010
00011
数据规模与约定: 1 <= n, m <= 26
# 2.9 字串01
for i in range(32):
print("{:0>5}".format(format(i, 'b')))
2.10 闰年判断
-
问题描述:
-
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
年份是4的倍数而不是100的倍数;年份是400的倍数。
其他的年份都不是闰年。
输入描述:(输入包含一个整数y,表示当前的年份)
-
2013
-
2016
输出描述:(输出一行,如果给定的年份是闰年,则输出yes,否则输出no)
-
no
-
yes
数据规模与约定: 1990 <= y <= 2050
# 2.10 闰年判断
n = int(input("输入年份: "))
if n % 4 == 0 and n % 100 != 0 or n % 400 == 0:
print("yes")
else:
print("no")
[1]: 试题题目部分来自于 https://blog.csdn.net/qq_31910669
最后
以上就是懵懂汉堡为你收集整理的python基础试题 (蓝桥杯省赛试题)的全部内容,希望文章能够帮你解决python基础试题 (蓝桥杯省赛试题)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复