【蓝桥杯】非VIP基础题型训练17题 (Python 题解)

NO.I 基础题型

基础练习汇总

时间 题目 解析
21.12.24 早上 1. A+B问题 练习系统的适应
21.12.24 早上 2. 数组排序 输入输出排序
21.12.24 早上 3. 十六进制转为8进制 format o 16
21.12.24 早上 4. 十进制转化为十六进制 int x X
21.12.24 早上 5. 特殊回文数 str 与 list
21.12.24 早上 6. 特殊的数字 pow(x,y) str[]
21.12.24 中午 7. 4位数的回文数 str
21.12.24 中午 8. 杨辉三角 yeild 规律
21.12.24 中午 9. 查找整数
21.12.24 中午 10. min() max(),sum()
21.12.24 下午 12.字母图形 ord() chr()
21.12.24 下午 13. 01字符串 format({0:>5b})
21.12.24 下午 14. 判断闰年 y/4=0y/100!=0 or y/400=0
21.12.24 下午 15. Fibonacci数列 先取余数,不然会超时
21.12.24 下午 16 圆的面积 format :.7f 和 round()
21.12.24 下午 17. 序列求和 暴力超时,

试题1: A+B问题

A, B = map(int, input().split())
print(A+B)

试题2: 数组排序

count = int(input())
l1 = list(map(int, input().split()))
l1.sort()
for i in range(count):
    print(l1[i],end=" ")

试题3:十六进制To8进制

# 16 to 8
cnt = int(input())
for i in range(cnt):
    que = int(input(), 16) # 将16进制转为10进制
    print("{0:o}".format(que)) # 十进制转为8进制使用format {0:o} o代表8进制{0:#o} 带前缀0代表占位符
    format(0xa, 'o') # 输出不带前缀
# *^10 ⟹ 一共10位,居中,剩下的用*补齐
^居中 >右对齐 <左对齐

format(num,',')快速分割千分位

{:*>10}:右对齐左边使用* 填补

{:*^10 :居中对齐剩下使用*填补

试题4:十进制To十六进制

print("{0:X}".format(int(input())))
# 这里需要注意输出如果是大写使用X ,如果是小写使用x 
# 16:x 8:o 10:int 2:b

试题5: 特殊回文数

# 回文数各个位数之后等于输入
def pali(num):  # 判断回文数
    s1 = str(num) 
    s2 = s1[::-1]
    if s1==s2: //翻转之后还是相等就是回文
        return True
    else:
        return False
# 如果是回文判断各个位数是否相等
n = int(input())
for i in range(10000,1000000):
    if pali(i):
        ls = list(str(i))
        sum = 0
        for j in ls:
            sum+=int(j)
        if sum == n:
            print(i)

试题6:特殊的数字

153 = 1*1*1 + 5*5*5 + 3*3*3

import math 
for i in range(100,1000):
    strs = str(i)
    ans = math.pow(int(strs[0]),3)
    ans1 = math.pow(int(strs[1]),3)
    ans2= math.pow(int(strs[2]),3)
    if i == (ans+ans1+ans2):
        print(i)
        

试题7:4位数的回文数

for i in range(1000,10000):
    s = str(i)
    s1 = s[::-1]
    if s == s1:
        print(i)

试题8:杨辉三角

解析:首尾都是1, 中间部分是按照前一个的0+1,1+2,2+3,3+4...这样递推下来的;

这里使用yield 生成器,返回之后下一次从前一次继续往下

n = int(input())
def tri():
    p = [1]
    while True:
        yield p
        p = [1] +[p[i]+p[i+1] for i in range(len(p)-1)] + [1]
de = 0
for t in tri():
    for l in t:
        print(l,end=" ")
    print()
    de = de + 1
    if de == n:
        break

试题9:查找整数

#include<iostream>
using namespace std;
int main()
{
	int n,target,ans=0;
  cin>>n;
	int a[n];
	for(int i=0; i<n; i++)
	{
		cin>>a[i];
	}
	cin>>target;
	for(int i=0;i<n;i++)
	{
		if (target == a[i])
		{
			ans = i+1;
			break;
		}
	}
	if (ans==0){cout<<-1;}
	else{cout<<ans;}
	
	return 0;
}
cnt = int(input())
li = map(int, input().split())
ls = list(li)
target = int(input())
ans = 0
if target not in ls:
    print("-1")
for i in ls:
    if i == target:
        print(ls.index(i)+1)
        break

image-20211224125340057

试题10:min() max(),sum()

n = int(input())
l1 = list(map(int,input().split()))
l_min = min(l1)
l_max = max(l1)
sum = sum(l1)
print(l_max)
print(l_min)
print(sum)


试题11: 字母图形

对角线

i<j

i>j

n,m = map(int, input().split())
for i in range(1,n+1):
    #print(chr(ord("A")+i-1),end="")
    for j in range(1,m+1):
        if i == j:
            print("A",end="")
        if i<j: # 右上角
            print(chr(ord("A")+j-i),end="")
        if i>j: # 左下角
            print(chr(ord("A")+i-j),end="")
    print()

试题12:01字符串

输出格式向右对齐左边补0

for i in range(32):
    print("{:0>5b}".format(i))

试题13:判断闰年

year = int(input())
if (year%4==0 and year%100!=0) or year%400==0:
	print("yes")
else:
	print("no")

试题14:Fibonacci数列

每次计算每一项的时候都用余数进行保存,不用将该项的具体值计算出来之后在取余数

n = 10007
num = int(input())
a1 = 1
a2 = 1
sum = 0

for i in range(1,num+1):
    sum = a1%n
    temp = a2;
    a2 = (a1 + a2)%n
    a1 = temp

print(sum)

试题15:圆的面积

# 100
import math
radius = int(input())
area = math.pi * radius *radius
print("{:.7f}".format(area))
#90 
import math
radius = int(input())
area = math.pi * radius *radius
print(round(area,7))

对于round() 虽然也是采用四舍五入的方式,但是对于末尾是0的会直接舍弃
print(round(123.2000,3)) # 123.2

试题16:序列求和

等差数列求和

# 80 暴力超时
n = int(input())
sum = 0
for i in range(n+1):
	sum += i
print(sum)

# 等差数列求和
n = int(input())
print(int((1+n)*n/2))



2021-12-25 15:45:13 星期六

posted @ 2021-12-25 15:46  jucw  阅读(245)  评论(0编辑  收藏  举报