目录
第二十一题:石子游戏
n = int(input('地上有n堆石子:')) # 堆数n
ls = []
for i in range(n):
ls.append(int(input())) # 每堆石子的个数存入列表
'''ls = [int(input()) for i in range(n)] #这样也可遍历生成列表'''
ls.sort()
score = 0
# 实现 每次取最大两堆合并
while len(ls) > 1:
score += (ls[-1] +1) * (ls[-2] +1)
ls[-2] += ls[-1]
ls.pop(-1) #补充:列表中删除元素有三种方法(del,remove,pop)
print(score) # 输出得分score
第二十二题:数的分解方法
num = 0
for i in range(1,2019):
if '2' not in str(i) and '4' not in str(i): # py的and是连接条件语句
for j in range(i+1,2019):
if '2' not in str(j) and '4' not in str(j):
#这里k不能用for否则会超时(嵌套for耗时很长,尽量不用)
k = 2019 -i-j
if k >j and '2' not in str(k) and '4' not in str(k):
if i+j+k ==2019:
num += 1
print(num)
第二十三题:数列求值
n = eval(input('输入第?项(n>=4):'))
num1,num2,num3 = 1,1,1
for i in range(4,n+1):
num1,num2,num3 = num2,num3,(num1+num2+num3) %10000
#注意 num3 这里取余,加快运算和直接求后四位数(不影响结果)
print(num3) #直接print出来的是第n项后四位数
第二十四题: 数位递增的数
n = int(input('请输入整数n:'))
num = 0 #有num个数位递增的数
for i1 in range(1,n+1):
s = str(i1)
ct_num = 0 #前后两数满足数位递增,则+1
for i2 in range( len(s) -1):
if s[i2] <=s[i2+1]:
ct_num += 1
if ct_num == len(s)-1: #如果ct_num=比较次数,符合数位递增
num += 1
print(num)
第二十五题:特殊回文数
ls = []
n = int(input('输入一个正整数n:'))
# 求6位的回文数
for i in range(1,1000):
for j in range(1,1000):
if i == int(str(j)[::-1]):
s = str(j)+str(j)[::-1]
sumk = 0
if len(s) == 6:
for k in range(len(s)):
sumk += int(s[k])
if sumk == n:
ls.append(int(s))
# 求5位的回文数
for i in range(1,1000):
for j in range(1,100):
i = str(i)
if i[0:-1] == str(j)[::-1]:
s = i + str(j)
sumk = 0
if len(s) == 5:
for k in range(len(s)):
sumk += int(s[k])
if sumk == n:
ls.append(int(s))
ls.sort(key=lambda x:x)
for _ in ls:
print(_)
第二十六题: 完全二叉树的权值
n = int(input('一个整数 N:'))
values = list(map(int,input('N个整数:').split())) #把输入n个数转化列表
m =0 #计算二叉树的深度k(结点个数=2**k -1)
while 2**m -1 !=n:
m +=1
d = {}
for i in range(m):
a,b = 2**i -1, 2**(i+1) -1
d[i+1] = sum(values[a:b]) #字典,key层数:value该层权值的和
ls = list(d.items())
ls.sort(key=lambda x:x[1]) #按照层数对应权值和,从小到大排序
print(ls[-1][0])
第二十七题: 晚会节目单
n,m = map(int,input('两个整数 n, m:').split())
level = list(map(int,input('n个整数,为每个节目好看值:').split()))
ls = level.copy()
ls.sort(key=lambda x:x,reverse=True)
ls = ls[0:m]
lv_ls = []
for i in level:
for j in ls:
if i == j:
lv_ls.append(i)
break
print(lv_ls)
第二十八题:芯片测试
n = int(input('整数n(2≤n≤20)表示芯片个数:'))
good = []
for i in range(1,1+n):
ni = list(map(int,input('每行n个数据:').split()))
if ni.count(0) <= n/2:
good.append(str(i))
print(' '.join(good)) #注意join函数 只能连接str类型的列表元素
第二十九题: 幸运顾客
n = int(input('整数N,表示命令数:'))
all_ls = []
good_num = 0
good_ls = []
for i in range(n):
m = input('每行一个数:')
if int(m) >=0:
all_ls.append(m)
all_ls.sort()
elif int(m) == -1:
good_ls.append(all_ls[good_num])
good_num +=1
print('\n'.join(good_ls))
第三十题:序列计数(重点 难点!)
def get_num(x,y): #函数递归 学会很重要
num = 0 #有num个序列
if abs(x-y) <=1:
num +=1 #不能再分支
else:
num +=1 #如果可以产生分支,截止到该分支点的路径 也算一个序列
for n3 in range(1,abs(x-y)):
num += get_num(y,n3)
return num
n1 = int(input())
all_num = 0
for n2 in range(1,n1+1):
all_num += get_num(n1,n2)
print(all_num)
》》》如果第30题有不懂的,请看如下个人分析/解析:
(例如:输入4):
——————————————— Thanks♪(・ω・)ノ感谢阅读 ————————————————
题目资源来自:寻找永不遗憾的博客_CSDN博客-深度学习基础知识,地平线开发板相关,目标检测系列领域博主
做法以及答案来自笔者: