任务PTICE,COCI 2008/2009, Contest #1 – October 18, 2008。
Adrian,Bruno和Goran想加入鸟类爱好者的行列。俱乐部。然而, 他们不知道所有申请人都必须通过入学考试。该 考试由
N
个问题组成,每个问题都有三个可能的答案:A
,B
和C
。不幸的是,他们无法告诉鲸鱼这样的鸟儿 试图猜出正确的答案。
这三个男孩中的每一个都有一套关于什么样的答案会起作用的理论 最好的:
- Adrian声称最佳顺序为:
A, B, C, A, B, C, A, B, C, A, B, C ...
- 布鲁诺确信这更好:
B, A, B, C, B, A, B, C, B, A, B, C ...
- Goran嘲笑他们并将使用这个序列:
C, C, A, A, B, B, C, C, A, A, B, B ...
编写一个程序,给出正确的考试答案, 确定三者中哪一个是正确的 - 其序列包含 最正确的答案。
INPUT
第一行包含整数
N
(1 ≤ N ≤ 100
),数量为 关于考试的问题。第二行包含N
字符串 字母'A'
,'B'
和'C'
。这些都是正确的 答案中的问题。输出
在第一行输出
M
,即最大数量的正确答案 三个男孩中的一个得到了。之后,输出男孩的名字 (按字母顺序),其序列导致M
正确 答案。示例
输入
5 BAACC
输出
3 Bruno
输入
9 AAAABBBBB
输出
4 Adrian Bruno Goran
我的代码:
my_i = input()
my_inp = raw_input()
my_dict = {
'Adrian' : ('A','B','C')*my_i,
'Bruno' : ('B','A','B','C')*my_i,
'Goran' : ('C','C','A','A','B','B')*my_i
}
my_list = []
for i in my_inp:
i = str(i)
my_list.append(i)
A = 0
B = 0
C = 0
for i in range(my_i):
if my_list[i] == my_dict['Adrian'][i]:
A += 1
elif my_list[i] == my_dict['Bruno'][i]:
B += 1
elif my_list[i] == my_dict['Goran'][i]:
C += 1
a = False
b = False
c = False
a1 = 'Adrian'
b1 = 'Bruno'
c1 = 'Goran'
if A > B and A > C:
a = True
elif A < B and B > C:
b = True
elif A < C and B < C:
c = True
else:
a,b,c = True,True,True
print A,B,C
print max(A,B,C)
if a == True:
print a1
elif b == True:
print b1
elif c == True:
print c1
我想知道谁将通过考试。
输入
9
AAAABBBBB
输出
4
Adrian
我没有得到任何错误,但在这里它只打印Adrian。 Adrian = 4 Bruno = 3 Goran = 2
答案 0 :(得分:0)
你遇到的问题是你正在使用elif
来比较男孩的猜测和实际的答案 - 如果不止一个男孩的答案相同,那该怎么办?
相反,请将每项检查设为单独的if
:
for i in range(my_i):
if my_list[i] == my_dict['Adrian'][i]:
A += 1
if my_list[i] == my_dict['Bruno'][i]:
# ^ not elif
B += 1
if my_list[i] == my_dict['Goran'][i]:
# ^ not elif
C += 1
请注意,您可以使用itertools.cycle
和zip
以更少的重复次数执行此操作:
from itertools import cycle
N = 5 # or int(raw_input()) - this number isn't used
answers = "BAACC" # or raw_input()
boys = {'Adrian': cycle("ABC"),
'Bruno': cycle("BABC"),
'Goran': cycle("CCAABB")}
scores = {boy: sum(c1 == c2 for c1, c2 in zip(answers, guesses))
for boy, guesses in boys.items()}
max_score = max(scores.values())
print max_score
for boy, score in sorted(scores.items()):
if score == max_score:
print boy
通过避免每个男孩(A
,B
和C
)的正确答案数量的单独(且名称不当)变量,他们的名字(a1
,b1
和c1
)以及他们是否获得最高分(a
,b
和c
),这减少了重复的代码和可以更容易地将其他人(使用他们自己的猜测策略)添加到字典中。