A题
count = 86419755
for i in range(12345678, 98765433):
pp = str(i)
for j in range(len(pp)):
if pp[j] == '2':
for q in range(j, len(pp)):
if pp[q] == '0':
for t in range(q, len(pp)):
if pp[t] == '2':
for m in range(t, len(pp)):
if pp[m] == '3':
count -= 1
else:
continue
else:
continue
else:
continue
else:
continue
print(count)
85774349
lis=[0]*2024
for i in range(1,2024):
if i%2==0:
c=int(i//2)
d=i
for j in range(1,c+1):
d+=j
lis[i]=d
if i%2!=0:
pp=int((i-1)/2)
d2=i
for q in range(1,pp+1):
d2+=q
lis[i]=d2
print(max(lis))
513589
from itertools import combinations
lis=[]
s=input()
p=[]
for i in range(2,len(s)):
nc = [''.join(i) for i in combinations(s, i)]
lis += nc
for j in lis:
for i in range(len(j)):
p.append(s.index(j[i]))
i=len(p)-1
while i>1:
if p[i]-p[i-1]>=2:
i-=1
else:
lis.remove(j)
break
p=[]
for j in range(len(lis)):
lis[j] = lis[j].replace('a', '1+')
lis[j] = lis[j].replace('b', '2+')
lis[j] = lis[j].replace('c', '3+')
lis[j] = lis[j].replace('d', '4+')
lis[j] = lis[j].replace('e', '5+')
lis[j] = lis[j].replace('f', '6+')
lis[j] = lis[j].replace('g', '7+')
lis[j] = lis[j].replace('h', '8+')
lis[j] = lis[j].replace('i', '9+')
lis[j] = lis[j].replace('j', '10+')
lis[j] = lis[j].replace('k', '11+')
lis[j] = lis[j].replace('l', '12+')
lis[j] = lis[j].replace('m', '13+')
lis[j] = lis[j].replace('n', '14+')
lis[j] = lis[j].replace('o', '15+')
lis[j] = lis[j].replace('p', '16+')
lis[j] = lis[j].replace('q', '17+')
lis[j] = lis[j].replace('r', '18+')
lis[j] = lis[j].replace('s', '19+')
lis[j] = lis[j].replace('t', '20+')
lis[j] = lis[j].replace('u', '21+')
lis[j] = lis[j].replace('v', '22+')
lis[j] = lis[j].replace('w', '23+')
lis[j] = lis[j].replace('x', '24+')
lis[j] = lis[j].replace('y', '25+')
lis[j] = lis[j].replace('z', '26+')
lis[j]+="0"
maxx=0
for j in range(len(lis)):
c=eval(lis[j])
maxx=max(c,maxx)
print(lis)
print(maxx)
......
修改:
1
count = 0
for i in range(12345678, 98765433):
pp = str(i)
has_2023 = False
for j in range(len(pp)):
if pp[j] == '2':
for q in range(j+1, len(pp)):
if pp[q] == '0':
for t in range(q+1, len(pp)):
if pp[t] == '2':
for m in range(t+1, len(pp)):
if pp[m] == '3':
has_2023 = True
break
if not has_2023:
count += 1
print(count)
##85959030
2.
第一种思路是,根据面值 2023 的硬币数最多,直接尽可能地兑换面值 2023 的旧硬币,总数为:
上述方法在兑换时使用的最大面值为 (因为用 1011 和 1012 凑成 2023 时,数量取决于 1011,所以不考虑 1012),最优的凑法是凑成面值 2023 (= 1011 × 2 + 1) 的旧硬币
第二种思路是, 枚举用于兑换的新硬币最大面值 ,并兑换面值为
的旧硬币,此时用于兑换的新硬币的最小面值为
对于每一组 ,可以兑换面值为
的旧硬币的个数为
,不难推导出这是个关于 r 的二次函数,也就是其有极大值
枚举 r 并进行求解,最大值为:682425
# 创建一个结果集表示:两个硬币能兑换出的所有结果,共4046种
res = [0] * 4047
# 遍历范围从1到2023
for i in range(1, 2024):
# 再次遍历范围从i+1到2023
for j in range(i + 1, 2024):
# 将'res'列表中索引为(i+j)的元素增加i, 因为兑换的次数取决于最小的硬币数,所以加i
res[i + j] += i
# 找出'res'列表中的最大值并打印
c=res.index(max(res))
print(max(res),c)
#682425 2697
最大拼2697
我的代码,只判断了加起来小于等于2023的,其实可以是大于
3.
本题大概意旨是,不能选连续两个字符组成的序列,典型的打家劫舍板子
所以被包含的字符之间的空隔不超过 2
# 这题就是一个简单的dp
# 针对第i位的松散子序列 其最大价值要么是前i-2位的松散子序列加上自身价值
# 要么是i-1位松散子序列的最大价值
# 即 i位的松散子序列最大价值 = max(i-2位最大价值+自身字符价值, i-1位最大价值)
def subsequence(s):
n = len(s)
dp = [0 for _ in range(n + 1)]
dp[1] = ord(s[0]) - 96 # 这里注意ASCII码要减96才是1-26的序列
for i in range(2, n + 1):
dp[i] = max(dp[i-2] + ord(s[i - 1]) - 96, dp[i-1])
return dp[-1]
s = input()
print(subsequence(s))
一个松散子序列是指从原始字符串中选取的一组字符,这组字符之间的位置差至少为2,即任意相邻两个字符的位置索引差都大于等于2。例如,对于字符串 "abcde",其松散子序列可以是 "ace",因为每个字符之间的位置索引差都为2。而 "abe" 不是松散子序列,因为字符 'b' 和字符 'e' 的位置索引差为1,不满足条件。
换句话说,松散子序列是在原始字符串中选取的一组字符,这些字符在位置上不连续,其位置之间至少间隔一个字符。
ord() 函数 转换ASCII码
##开始没看懂题目