2014-09-30 111 views
-4

任務PTICE,COCI 2008/2009, Contest #1 – October 18, 2008混淆輸出並回答出錯

阿德里安,布魯諾和戈蘭想加入鳥類愛好者俱樂部。但是,他們並不知道所有申請人都必須通過入學考試。 考試包含N問題,每個問題都有三個可能的答案:A, BC

不幸的是,他們不能告訴一隻鯨魚,所以他們試圖猜測正確的答案是 。

這三個男孩有什麼設置答案的理論將工作 最佳:

  • 阿德里安聲稱,最好的順序是:A, B, C, A, B, C, A, B, C, A, B, C ...
  • 布魯諾相信,這是更好的:B, A, B, C, B, A, B, C, B, A, B, C ...
  • 戈蘭嘲笑他們,並會使用此順序:C, C, A, A, B, B, C, C, A, A, B, B ...

寫一個程序,GIV對考試的正確答案, 確定三個中的哪一個是正確的 - 其序列包含最正確的答案 。

INPUT

第一行包含一個整數N1 ≤ 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 = 4 Bruno = 3 Goran = 2

+1

@Chalanthron這不是完全清楚你問這裏。爲了在StackOverflow上得到很好的答案,重要的是你要:(1)描述你想要做什麼(2)提供什麼令你困惑的最小可能的例子(3)正確地陳述你期望發生的事情(4)發生了什麼。粘貼多行代碼不是好習慣,在這裏,您已經添加了整個腳本,這使我們很難幫助您。 – Wilduck 2014-09-30 16:10:01

+1

如果有的話,編輯使事情不太清楚。請通讀這個方便的清單:http://meta.stackoverflow。com/questions/260648/stack-overflow-question-checklist – jonrsharpe 2014-09-30 16:10:38

+0

究竟是什麼*「可能是這行是錯的」*意思?!你有錯誤嗎(提供完整的追溯)?意想不到的產出(提供投入,預期和實際產出)?你做了什麼測試 - 你是否試圖「打印」任何值以查看發生了什麼?請**閱讀**我剛剛發佈的鏈接,並提供適當的信息。 – jonrsharpe 2014-09-30 16:41:19

回答

0

您的問題是您正在使用elif來比較男孩的猜測與實際答案 - 如果多個男孩有相同的答案是正確的?

相反,使每檢查一個單獨的if:使用itertools.cyclezip

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 

注意,您可以用少得多的重複做到這一點:

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 

通過避免單獨(和窮命名)爲正確答案的每個男孩(ABC)的數量,他們的名字(a1,變量和c1)以及他們是否得到最大分數(a,bc),這就減少了重複的代碼,並且可以更容易地向字典中添加額外的人員(使用他們自己的猜測策略)。