2023年 NO C初 中组 国赛真题
编程实现 :
输 入一个正整数,判断它的二进制形式是否是回文数,如果是输出 Tru e ,不是输出 Fals e
例 :数字 3 的二进制形式是 11 ,是一个回 文数,输出 Tru e 。
输
输
输出描述
判 断数字 n 的二进制形式是否是回文数,如果是输出 Tru e ,不是输出 Fals e 。
输
3
输出样例
Tru e
参 考代码
n = int (input ())
s = bin (n)[ 2:]
print (s == s[::- 1])
拍 卖
编程实现 :
为了分配
以下规则:
1、 起拍价必须
2、 谁先出价100谁 获得这件物品;
3、 加价为1到 5之 间的整数;
现在由你先出价,假设对
是否能获得这件物品,如果能获得,输出Tru e, 否则输出Fals e 。
例 :你 出价95, 那么对
管怎么加价,你都能直接加价到100, 直 接获得这件物品,输出Tru e。
输
输 ≤ n < 100) 。
输出描述
输出是否能获得这件物品,如果能获得,输出Tru e, 否则输出Fals e 。
输
1
2
3
94
输 出样例
Tru e
参 考代码
n = int (input ())
ls = [ False for i in range (100 )]
num = 94
while num >= 1:
ls[num] = True
num -= 6
print (ls[n])
# 法 2
n = int (input ())
if ( 100 - n) % 6 == 0:
print (True )
else :
print (False )
数 字谜题
编程实现 :
现在有
作,那么
例:数字串12123, 操作
输
输 ≤ n< 100000) ,只包含数字 1, 2, 3。
输 出描述
输出替换的操作次数。
输
12123
输 出样例
2
参考代码
s = input ()
cnt = 0
while '123' in s:
n = s.count( '123' )
s = s.replace( '123' , '321' )
cnt += n
print (cnt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
# 优化之后通过全部评测点
# ls = list(input())
# cnt = 0
# i = 0
# while i <= len(ls) - 3:
# if ls[i:i+3] == ['1', '2', '3']:
# cnt += 1
# ls[i:i+3] = ['3', '2', '1']
# i -= 2
# if i < 0:
# i = 0
# else:
# i += 1
# print(cnt)
电 报加解密
编程实现
A国 和B国 正在陷
泄漏,A国 司令部向
加密的规则:
- 电 报中的
回到第
- 电 报中的
回到最后
- 电 报中的数字,按数码从
替换为 2 、 9 替 换为 0 。
- 其 他字符不做变化。
解密的规则为加密规则的逆过程。
例如,字
Hm 07, 电报 H m 07 经 过解密之后为 g N 96。
现 在,
解密后**的 结果。
输
第
接下来 n
保 证字符串 s i 中 只包含
现:', '、 '. '、 ': '、 '! ' 和 '? ') 。
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
输出描述
共 n
输
3
fP PE M VD L P O Z P VS F Y B N !
aF M JF W F J O Z P VSTFM G!
h X JT I U IF F Y B N B T V D DFT T!
输 出样例
Good lu ck o n y o ur e xa m !
Beli e ve in y o urs e lf !
I w is h t h e e xa m a s u cce ss!
参 考代码
n = int (input ())
ls = []
for i in range (n):
ls.append( input ())
for s in ls:
ans = ''
for ch in s:
if ch.islower():
ans += chr (( ord (ch) - ord ('a' ) + 1) % 26 + ord ('A' ))
elif ch.isupper():
ans += chr (( ord (ch) - ord ('A' ) + 25 ) % 26 + ord ('a' ))
elif ch.isdigit():
ans += chr (( ord (ch) - ord ('0' ) + 9) % 10 + ord ('0' ))
else :
ans += ch
print (ans)
办 事处选址
编程实现 :
现将某区域的地图变成
之和最短(只能上下左右
少?
例 如:共有两处居
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第
处,到第
输
第 ≤ n≤ 10000) 。
第 居 <100, 0≤ 列
数 <100 ) ,中间
输出描述
输出最短距离之和。
输
2
0 0
0 1
输 出样例
1
参考代码
n = int (input ())
lsx = []
lsy = []
for i in range (0, n):
x, y = [ int (i) for i in input ().split()]
lsx.append(x)
lsy.append(y)
lsx.sort()
lsy.sort()
midx = lsx[n// 2]
midy = lsy[n// 2]
1
2
3
4
5
6
7
8
9
10
11
tot = 0
for i in range (0, n):
tot += abs (midx - lsx[i]) + abs (midy - lsy[i])
print (tot)
挑 选礼物
**编 程实现**
小猴家里有一片香蕉林,由于小猴的好朋友小美快要过生日了,小猴打算在一排共 n 棵香
蕉树中选择两颗香蕉树作为小美的生日礼物,为了显得不是那么随意,小猴认为选取的
两棵香蕉树的距离不能超过d ,但是方案太多了,小猴想要先知道一共有多少种选择的
方案。
已知一排香蕉树的位置坐标依次为 x1,x2,x3......xn ,请你帮助小猴计算一下选择两棵距离
不超过d 的香蕉树的方案有多少种。
注意:方案 xi 、 xj 和方案 xj 、 xi 认为是同一种方案。
**输
第一行,包含一个整数 n ( 1≤n≤5000 ) 。
第二行
2023年NOC初中组决赛Python真题,2023年NOC大赛Python初中组决赛真题