持续更新ing
【填空】
1、组队
问题描述
思路
核心:寻找每一号位的最大值
- 枚举,暴力破解
- 缩小范围,寻找每一号位5个最大评分,再进行for循环
代码如下
import os
import sys
# 请在此输入您的代码
s1=[97,92,0,0,89,82,0,0,0,95,0,0,94,0,0,0,98,93,0,0]
s2=[90,85,0,0,83,86,0,97,0,99,0,0,91,83,0,0,83,87,0,99]
s3=[0,96,0,0,97,0,0,96,89,0,96,0,0,87,98,0,99,92,0,96]
s4=[0,0,0,80,0,0,87,0,0,0,97,93,0,0,97,93,98,96,89,95]
s5=[0,0,93,86,0,0,90,0,0,0,0,98,0,0,98,86,81,98,92,81]
ls=[]
'''
#暴力求解:
for i in s1:
for j in s2:
for k in s3:
for x in s4:
for y in s5:
if(i!=j!=k!=x!=y):
ls.append(i+j+k+x+y)
print(max(ls))
'''
#范围求解:
s1_5=[]
s2_5=[]
s3_5=[]
s4_5=[]
s5_5=[]
#分别存入n号位对应的5个最大数值
for i in range(0,5):
s1_5.append(max(s1))
s1.remove(max(s1))
for i in range(0,5):
s2_5.append(max(s2))
s2.remove(max(s2))
for i in range(0,5):
s3_5.append(max(s3))
s3.remove(max(s3))
for i in range(0,5):
s4_5.append(max(s4))
s4.remove(max(s4))
for i in range(0,5):
s5_5.append(max(s5))
s5.remove(max(s5))
for i in s1_5:
for j in s2_5:
for k in s3_5:
for x in s4_5:
for y in s5_5:
if(i!=j!=k!=x!=y):
ls.append(i+j+k+x+y)
print(ls)
print(max(ls))
2、数列求值
import os
import sys
# 请在此输入您的代码
# a,b,c,d = 1,1,1,0
# for i in range(3,20190324):
# d = (a+b+c)%10000
# a,b,c = b,c,d
# print(d)
print(4659)
3、质数
import os
import sys
import math
# ①构造列表,存储质数
# ②质数个数等于2019,放回其值
# n = sys.maxsize
# ls = [2,3]
# for i in range(4,n):
# for j in range(2,i//2+1):
# if i%j == 0:
# break
# else:ls.append(i)
# if len(ls) == 2019:
# break
# print(ls[2018])
print(17569)
4、年号字串
import os
import sys
# 个位
a = 2019 % 26
b = 2019 // 26
# 十位
c = b % 26
# 百位
d = b // 26
list = '*ABCDEFGHIJKLMNOPQRSTUVWXYZ'
print(list[d] + list[c] + list[a])
5、数的分解
import os
import sys
# 要求:分成不同的正整数,不包含2,4,不重复性
# 1、利用for循环,
# 2、不包含2,4 利用str(i).count(2) == 0
ans = 0
for i in range(1,672):
for j in range(i+1,(2019-i)//2+1):
a = str(i)+str(j)+str(2019-i-j)
if 2019 - i - j > j and '2' not in a and '4' not in a:
ans += 1
print(ans)
6、迷宫
7、奇数倍数
问题描述
个人思路
- 先判断是2019的整倍数
- 将数,转换为str型,对其for循环遍历,除于2
- 若各位数都为奇数,则输出,并跳出循环
代码
import os
import sys
n = sys.maxsize
for i in range(n):
if i % 2019 ==0:
for j in str(i):
if int(j) % 2 == 0:
break
else:
print(i)
break
8、完全二叉树的权值
代码如下
import os
import sys
import math
N = int(input())
A = list(map(int, input().split()))
ans = []
#ceil向上取整,log求对数
deep = math.ceil(math.log(N+1,2))
b = 0
for i in range(1, deep+1):
c = 2 ** i - 1
ans.append(sum(A[b:c]))
b = c
#index查找索引值,默认0开始
print(ans.index(max(ans))+1)
9、质数拆分
10、求和
import os
import sys
sum_l = 0
for i in range(1,2020):
#int -> str
str_1 = str(i)
if ('2' in str_1) or ('1' in str_1) or ('0' in str_1) or ('9' in str_1):
sum_l += int(str_1)
print(sum_l)
【程序设计】
1、特别数之和
2、特殊数之平方和
注:临时变量存储总和的时间 < 列表存储数据
3、等差数列
4、后缀表达式
5、扫地机器人
【总结】
【填空】
- 枚举爆破,for循环
- 找规律,容易数据溢出,缩小范围
- 取余,获取每个数的每个位数
- 树结构
【程序设计】
- 数学逻辑知识
- DP动态规划
- 二分法