Python 编程练习题
写出来的题代码不舍得删,就记录在这里吧。
一、数数
n = int(input())
i = 3
a = [0]*(n+1) # +1防止越界
a[1] = 3
a[2] = 9
if n<3:
print(a[n])
else:
while True:
if i>n:
break
a[i] = (2*(int(a[i-1])+int(a[i-2])))%10000000000 #找规律得此核心代码,提前取余防止超内存
i += 1
if n<=36:
print(a[i-1])
else:
print("......",end="")
print('%.10d'%a[i-1]) #保证前导0补足10位
二、回收站选址
n = int(input())
a = [[0 for _ in range(2)] for _ in range(n)]
c = [0]*5
for count in range (0,n):
b = input().split()
a[count][0] = int(b[0])
a[count][1] = int(b[1])
for count in range (0,n):
if ([a[count][0]+1,a[count][1]] in a) and ([a[count][0]-1,a[count][1]] in a) and ([a[count][0],a[count][1]+1] in a) and ([a[count][0],a[count][1]-1] in a):
socre = 0
if [a[count][0]+1,a[count][1]+1] in a:
socre += 1
if [a[count][0]+1,a[count][1]-1] in a:
socre += 1
if [a[count][0]-1,a[count][1]+1] in a:
socre += 1
if [a[count][0]-1,a[count][1]-1] in a:
socre += 1
for i in range (0,5):
if i == socre:
c[i] += 1
for i in range (0,5):
print(c[i])
三、十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
代码如下:
n = int (input())
for count in range (n):
a = input()
print(oct(int(a,16))[2:])
四、十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
代码如下:
n = int(input())
ans = hex(n)[2:].upper()
print(ans)
五、杨辉三角
代码如下:
n = int(input())
a = [[1]*(i+1) for i in range(n)]
for i in range (n):
for j in range (0,i+1):
if j!=i and j!=0:
a[i][j] = a[i-1][j] + a[i-1][j-1]
if i!=j:
print(str(a[i][j]),end=" ")
else:
print(str(a[i][j]),end="")
print()
六、单词分析
代码如下:
s = input()
dic = {}
for count in range (26):
dic[chr(97+count)] = 0
for count in range (len(s)):
dic[s[count]] += 1
ans1 = 'a'
ans2 = dic[ans1]
for count in range (1,26):
if dic[chr(97+count)] > ans2:
ans2 = dic[chr(97+count)]
ans1 = chr(97+count)
print(ans1)
print(ans2)
七、成绩统计
代码如下:
n = int(input())
passNum = 0
goodNum = 0
for count in range (n):
a = int(input())
if a >= 85:
goodNum += 1
if a >= 60:
passNum += 1
print(str(int((passNum*100/n)+0.5)) + "%")
print(str(int((goodNum*100/n)+0.5)) + "%")
八、平面切分
解析:
先用set把重复边去掉,之后看新加的边和已有的边有多少个交点,交点数 + 1= 新增平面数,之后再新增一条边重复之前的过程。
如图,1-4号边按顺序添加。
- 加入1号边显然平面数为2
- 加入2号边发现无新增交点,新增平面数 = 新增交点数 + 1 = 1。一共有3个平面
- 加入3号边发现有2个新增交点,新增平面数 = 新增交点数 + 1 = 3。一共有6个平面。
- 加入4号边发现新增2个交点,新增平面数 = 新增交点数 + 1 = 3。一共有9个平面
代码如下:
n = int(input())
x = [[0 for _ in range (2)] for _ in range (n)]
Node = set()
ans = 2
for count in range (n):
a , b = map(int,input().split())
x[count][0] = a
x[count][1] = b
x = list(set(tuple(t) for t in x)) #利用set去重
for i in range (1,len(x)):
j = i - 1
while j>=0:
if x[i][0] != x[j][0]:
node = ((x[j][1] - x[i][1])/(x[i][0] - x[j][0]) , x[i][0] * ((x[j][1] - x[i][1])/(x[i][0] - x[j][0])) + x[i][1])
if node not in Node:
Node.add(node)
j -= 1
ans += len(Node) + 1
Node.clear()
print(ans)
九、DateTime包的使用
代码如下:
import datetime
Begin = datetime.datetime(2000,1,1)
End = datetime.datetime(2020,10,1)
Days = (End - Begin).days
runsum = 0
for count in range (Days + 1):
Date = Begin + datetime.timedelta(count)
if Date.day == 1 or Date.isoweekday() == 1:
runsum += 2
else:
runsum += 1
print(runsum)