1. 语句解析
题目描述
一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是
[变量]:=[变量或一位整数];
。未赋值的变量值为 0 输出 a,b,c 的值。输入格式
一串符合语法的 PASCAL 语言,只有 a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 0。
输出格式
输出 a,b,c 最终的值。
样例输入
a:=3;b:=4;c:=5;
样例输出
3 4 5
dict_nums = {'a': 0, 'b': 0, 'c': 0}
list1 = [s for s in input().strip().split(';') if s]
# print(list1)
for s in list1:
var, value = s.split(':=')
if value in dict_nums.keys():
dict_nums[var] = dict_nums[value]
else:
dict_nums[var] = value
print(' '.join(map(str, list(dict_nums.values()))))
2. 禽兽的传染病
题目描述
禽兽患传染病了。一个禽兽会每轮传染 x 个禽兽。试问 n 轮传染后有多少禽兽被传染?
(提示:保证 x,n 以及答案都在 64 位无符号整数的表示范围内。)
输入格式
两个非负整数 x 和 n。
输出格式
一个整数,即被传染的禽兽数。
样例输入
10 2
样例输出
121
def f(x, n):
"""
第一轮:初始:1 传染1:x ==> x+1(新被传染的加上上一轮的)
第二轮:初始:x+1 传染1:x ==> (x+1) * x + (x + 1)
第三轮:初始:(x+1) * x + (x + 1) ==> ((x+1) * x + (x + 1)) * x + ((x+1) * x + (x + 1))
...
"""
if n == 1:
return x + 1
else:
return f(x, n - 1) * (x + 1)
x, n = map(int, input().strip().split())
print(f(x, n))
3. 三子棋Ⅰ
题目描述
小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?
由于小a比较愚蠢,uim总是让他先。
我们用9个数字表示棋盘位置:
123
456
789
所有的棋谱都是已经结束的棋局,要么一方获胜,要么平局。今天,他们下了一下午的棋,小a为了提高技术,录下了很多棋谱。他想知道,一盘棋结束时,到底是谁赢。
输入格式
一行,一串数字,表示落子的地点。小a总是先下
输出格式
一行,如果小a赢,输出“xiaoa wins.”。如果uim赢,输出“uim wins.”。如果平局,输出“drew.”
样例输入 #1
5237649
样例输出 #1
xiaoa wins.
样例输入 #2
539128647
样例输出 #2
drew.
def check(list1):
"""
能赢的几种情况:
[1, 2, 3],
[1, 4, 7],
[1, 5, 9],
[2, 5, 8],
[3, 6, 9],
[3, 5, 7],
[4, 5, 6],
[7, 8, 9]
"""
flag = False
if 1 in list1:
if (2 in list1 and 3 in list1) or (4 in list1 and 7 in list1) or (5 in list1 and 9 in list1):
flag = True
if 2 in list1:
if 5 in list1 and 8 in list1:
flag = True
if 3 in list1:
if (6 in list1 and 9 in list1) or (5 in list1 and 7 in list1):
flag = True
if 4 in list1:
if 5 in list1 and 6 in list1:
flag = True
if 7 in list1:
if 8 in list1 and 9 in list1:
flag = True
return flag
a = []
u = []
str1 = input().strip()
for i in range(len(str1)):
if i % 2 == 0:
a.append(int(str1[i]))
else:
u.append(int(str1[i]))
# print(sorted(a))
# print(sorted(u))
if check(sorted(a)):
print('xiaoa wins.')
elif check(sorted(u)):
print('uim wins.')
else:
print('drew.')
4. 手机
题目描述
一般的手机的键盘是这样的:
要按出英文字母就必须要按数字键多下。例如要按出
x
就得按 9 两下,第一下会出w
,而第二下会把w
变成x
。0 键按一下会出一个空格。你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
输入格式
一行句子,只包含英文小写字母和空格,且不超过 200 个字符。
输出格式
一行一个整数,表示按键盘的总次数。
样例输入
i have a dream
样例输出
23
dict_key = {
'1': ['a', 'd', 'g', 'j', 'm', 'p', 't', 'w', ' '],
'2': ['b', 'e', 'h', 'k', 'n', 'q', 'u', 'x'],
'3': ['c', 'f', 'i', 'l', 'o', 'r', 'v', 'y'],
'4': ['s', 'z']
}
str1 = input()
count = 0
for i in str1:
if i in dict_key['1']:
count += 1
if i in dict_key['2']:
count += 2
if i in dict_key['3']:
count += 3
if i in dict_key['4']:
count += 4
print(count)
5. 表达式括号匹配
题目描述
假设一个表达式有英文字母(小写)、运算符(
+
、-
、*
、/
)和左右小(圆)括号构成,以@
作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出YES
;否则输出NO
。表达式长度小于 255,左圆括号少于 20 个。输入格式
一行:表达式。
输出格式
一行:
YES
或NO
。样例输入 #1
2*(x+y)/(1-x)@
样例输出 #1
YES
样例输入 #2
(25+x)*(a*(a+b+b)@
样例输出 #2
NO
def remove_brackets(s):
while s.count('()') != 0:
# 将'()'全部替换从空字符
s = s.replace('()', '')
return s
str1 = input().strip()
str1 = str1[:str1.find('@')]
# print(str1)
if len(str1) < 255 and str1.count('(') < 20:
for i in str1:
# 只保留'('和')'
if i not in ['(', ')']:
str1 = str1.replace(i, '')
# print(str1)
# 判断左圆括号和右圆括号出现的次数是否相等
if str1.count('(') == str1.count(')'):
new_str = remove_brackets(str1)
# print(new_str)
if len(new_str) == 0:
print('YES')
else:
print('NO')
else:
print('NO')
6. Davor
题目描述
在征服南极之后,Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。他将在 2018 年 12 月 31 日开始出发,在这之前需要一共筹集 n 元钱。他打算在每个星期一筹集 x 元,星期二筹集 x+k 元,……,星期日筹集 x+6k 元,并连续筹集 52 个星期。其中 x,k 为正整数,并且满足 0 < X ≤ 100。
现在请你帮忙计算 x,k 为多少时,能刚好筹集 n 元。
如果有多个答案,输出 x 尽可能大,k 尽可能小的。注意 k 必须大于 0。
输入格式
输入一个整数 N (1456 ≤ N ≤ 145600), 表示需要筹集的资金.
输出格式
第一行输出 x的值 , 第二行输出k的值.
样例输入 #1
1456
样例输出 #1
1 1
样例输入 #2
6188
样例输出 #2
14 1
样例输入 #3
40404
样例输出 #3
99 4
# (7*x + 21*k)*52 = n
n = int(input().strip())
if 1456 <= n <= 145600:
num = n // (52 * 7)
# print(num)
dict_num = {}
for x in range(100, 0, -1):
if x < num and (num - x) % 3 == 0:
k = (num - x) // 3
dict_num[str(x)] = k
# print(dict_num)
list_num = sorted(dict_num.items(), key=lambda m: m[1])
# print(list_num)
print(list_num[0][0])
print(list_num[0][1])
7. Even? Odd? (判断奇偶数)
题目描述
Bessie那惨无人道的二年级老师搞了一个有 N 个正整数 I 的表叫Bessie去判断“奇偶性”(这个词语意思向二年级的学生解释,就是“这个数是单数,还是双数啊?”)。
写一个程序读入N个整数,如果是双数,那么在单独的一行内输出"even",如果是单数则类似地输出"odd".
输入格式
第一行位一个整数N(1 <= N <= 100)
随后N行,一行一个正整数I (1 <= I <= 1060) ,判断其奇偶性
输出格式
奇数输出"odd",偶数输出"even"
样例输入 #1
2 1024 5931
样例输出 #1
even odd
n = int(input().strip())
for i in range(n):
num = input().strip()
if num[-1] in ['0', '2', '4', '6', '8']:
print('even')
else:
print('odd')
8. 彩票摇奖
题目描述
为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:
- 每张彩票上印有 7 个各不相同的号码,且这些号码的取值范围为 1~33。
- 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
- 共设置 7 个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
- 特等奖:要求彩票上 7 个号码都出现在中奖号码中。
- 一等奖:要求彩票上有 6 个号码出现在中奖号码中。
- 二等奖:要求彩票上有 5 个号码出现在中奖号码中。
- 三等奖:要求彩票上有 4 个号码出现在中奖号码中。
- 四等奖:要求彩票上有 3 个号码出现在中奖号码中。
- 五等奖:要求彩票上有 2 个号码出现在中奖号码中。
- 六等奖:要求彩票上有 1 个号码出现在中奖号码中。
注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖号码为:
23 31 1 14 19 17 18 23\ 31\ 1\ 14\ 19\ 17\ 18 23 31 1 14 19 17 18
,则彩票
12 8 9 23 1 16 7 12\ 8\ 9\ 23\ 1\ 16\ 7 12 8 9 23 1 16 7
由于其中有两个号码(23 和 1)出现在中奖号码中,所以该彩票中了五等奖。现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入格式
输入的第一行只有一个自然数 n(1 ≤ n < 1000),表示小明买的彩票张数;
第二行存放了 7 个介于 1 和 33 之间的自然数,表示中奖号码;
在随后的 n 行中每行都有 7 个介于 1 和 33 之间的自然数,分别表示小明所买的 n 张彩票。
输出格式
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
样例输入
2 23 31 1 14 19 17 18 12 8 9 23 1 16 7 11 7 10 21 2 9 31
样例输出
0 0 0 0 0 1 1
def cal_number(list1, list2):
"""计算两个列表的交集"""
count = 0
for i in list1:
if i in list2:
count += 1
return count
if __name__ == '__main__':
dict_result = {str(i): 0 for i in range(7)}
n = int(input().strip())
if 1 <= n < 1000:
# 中奖号码
list_numbers = [int(i) for i in input().strip().split()]
list2 = []
for i in range(n):
numbers = [int(j) for j in input().strip().split()]
list2.append(numbers)
for i in range(len(list2)):
# 计算交集长度
same_num = cal_number(list2[i], list_numbers)
# print(same_num)
# 对应的中奖张数进行累加
# 交集长度:1->六等奖 2->五等奖,以此类推
if same_num >= 1:
dict_result[str(7 - same_num)] += 1
print(' '.join(map(str, list(dict_result.values()))))
9. FILIP
题目描述
给你两个十进制正整数 a, b(100 ≤a,b≤ 999,a,b 不含 0 或不为 0),输出将这两个数
翻转
后的较大数。输入格式
第一行,两个十进制正整数 a, b。
输出格式
第一行,a 和 b 翻转后的较大数。
样例输入 #1
734 893
样例输出 #1
437
样例输入 #2
221 231
样例输出 #2
132
样例输入 #3
839 237
样例输出 #3
938
a, b = map(str, input().strip().split())
new_a = int(a[::-1])
new_b = int(b[::-1])
print(max(new_a, new_b))