2023年 NO C
灯的开关
编程实现 :
现在有n盏 灯,都是亮着的,编号为1到 n, 每 盏 灯都有
的倍数的灯的开关,再按
关,再按
输
输 ,代表有n盏 灯。
输出描述
输出仍然亮着的灯有多少盏。
输
10
输 出样例
6
参考代码
n = int (input ())
ls = [ 1 for i in range (n+ 1)]
cnt = 0
for i in range (1, n+ 1):
if i % 2 == 0:
ls[i] = -ls[i]
if i % 3 == 0:
ls[i] = -ls[i]
if i % 4 == 0:
ls[i] = -ls[i]
if i % 5 == 0:
ls[i] = -ls[i]
if ls[i] == 1:
cnt += 1
print (cnt)
算 式
编程实现 :
有
+、 -、 *、 /其 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
例:输
2 * 3 = 6 , a为 2, b为 3, c为 6;
2 * 4 = 8 , a为 2, b为 4, c为 8;
3 * 2 = 6 , a为 3, b为 2, c为 6;
4 * 2 = 8 , a为 4, b为 2, c为 8。
输
输
输 出描述
输 出算式有多少种可能。
输
*
输出样例
4
参考代码
op = input ()
cnt = 0
for a in range (1, 10 ):
for b in range (1, 10 ):
if a == b:
continue
if op == '+' :
c = a + b
elif op == '-' :
c = a - b
elif op == '*' :
c = a * b
elif op == '/' :
if a % b == 0:
c = int (a / b)
else :
continue
if c >= 1 and c <= 9 and c != a and c != b:
cnt += 1
print (cnt)
植 物
编程实现 :
为了应对僵
要选取攻击
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
输
第 输 两 个正整数n 和k, 中间 ,表示 有n种 植物可供选择(1 ≤ n≤50 ) ,
击 ≤ k≤100 ) 。
第
输出描述
输出达到
输
3 1 0
5 2 3
输 出样例
1
参考代码
n, k = [ int (i) for i in input ().split()]
attack = [ int (i) for i in input ().split()]
dp = [ 0] * (k + 1)
dp[ 0] = 1
for i in range (1, n + 1):
for j in range (k, attack[i- 1]- 1, - 1):
dp[j] += dp[j-attack[i- 1]]
print (dp[k])
连 连看
编程实现 :
现在有
就会合成
积分。经过多次操作后,最后只剩
获得多少分?
例如:场上有3张 卡牌,分数分别为10分 、23分 、5分 ,将10分 卡牌与23分 卡牌合成,可得到
33分 卡牌,再将33分 卡牌与5分 卡牌合成, 可得到38分 卡牌,获得总分数为33+ 38= 71分 为最多
的分数。
输
第 ≤ n≤ 10000) 。
第
开。
输出描述
输出最多可以获得的分数。
输
3
1
2
3
4
5
6
7
8
9
10
10 2 3 5
输 出样例
71
参 考代码
n = int (input ())
nums = [ int (i) for i in input ().split()]
nums.sort()
res = 0
while len (nums) > 1:
a = nums.pop()
b = nums.pop()
res += a + b
nums.append(a + b)
print (res)
# 法 2 :
n = int (input ())
nums = [ int (i) for i in input ().split()]
nums.sort()
res = 0
for i in range (n):
res += nums[i] * (i + 1)
print (res - nums[- 1])
地 宫宝藏
编程实现 :
现有地宫
值的宝藏,由于机关设置,你每取
给出房间的数量n和 每个房间的宝藏价值,请问你最多能拿
输
第 ≤ n≤100 ) 。
第
输出描述
输出最多可以获得的宝藏价值。
输
4
10 3 7 1 3
输 出样例
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
参考代码
n = int (input ())
ls = [ int (i) for i in input ().split()]
def check (nums ):
n = len (nums)
if n == 1:
return nums[ 0]
dp = [ 0] * n
dp[ 0] = nums[ 0]
dp[ 1] = max (nums[ 0], nums[ 1])
for i in range (2, n):
dp[i] = max (dp[i - 2] + nums[i], dp[i - 1])
return dp[- 1]
if n == 1:
print (ls[ 0])
else :
print (max (check(ls[ 0:n - 1]), check(ls[ 1:])))
编 程实现
为了迎接新同学,学校
位置,这些位置从左到右排成
建城堡的某种结构。然
下,发现
之和)。
到相邻编号的位置上。请帮同学们规划
bi 变 成 a i。
输
输
第
第
第 三
输出描述
输出
输
5
1 2 3 4 5
3 1 2 5 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
输出样例
4
参考代码
n = int (input ())
a = [ int (i) for i in input ().split()] + [ 0]
b = [ int (i) for i in input ().split()]
for i in range (n):
a[i] -= b[i]
ans = 0
for i in range (n):
ans += abs (a[i])
a[i+ 1] += a[i]
print (ans)
编 程实现
树或者是
视作全部是空地。
在
左、右
如果另
2023年NOC小高组决赛Python真题