《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q14)
阿新 • • 發佈:2018-12-14
《程式設計師的演算法趣題》-(日)增井敏克 , 書中為69 道數學謎題編寫了解題程式, 程式語言為:Ruby,JavaScript,C語言。有興趣的同學,可以購書閱讀~
在此更新個人編寫的Python版,僅供學習使用。(執行環境:Python3.6)
Q14 世界盃參賽國的國名接龍
2014 年 FIFA 世界盃的 32 個參賽國
舉個例子,如果像下面這樣,那麼連續 3 個國名之後接龍就結束了(因為沒有英文名稱以 D 開頭的國家)。
“Japan” →“Netherlands” →“Switzerland”問題
假設每個國名只能使用一次,求能連得最長的順序,以及相應的國名個數。
country_list = ["Brazil", "Croatia", "Mexico", "Cameroon", "Spain", "Netherlands", "Chile", "Australia", "Colombia", "Greece", "Cote d'Ivoire", "Japan", "Uruguay", "Costa Rica", "England", "Italy", "Switzerland", "Ecuador", "France", "Honduras", "Argentina", "Bosnia and Herzegovina", "Iran", "Nigeria", "Germany", "Portugal", "Ghana", "USA", "Belgium", "Algeria", "Russia", "Korea Republic", ] max_country_list = [] def find_next_country(used_country_list, country_map): bfind = False if len(country_map) != 0: for index, c in enumerate(country_map): if c[0] == used_country_list[-1][-1].upper(): find_next_country(used_country_list + [c], country_map[:index] + country_map[index + 1:]) bfind = True if not bfind or len(country_map) == 0: global max_country_list if len(max_country_list) < len(used_country_list): max_country_list = used_country_list for i, country in enumerate(country_list): find_next_country([country], country_list[:i]+country_list[i+1:]) print("能連得最長的國名個數為:%s\n%s" % (len(max_country_list), max_country_list))
執行結果:
能連得最長的國名個數為:8
['Korea Republic', 'Cameroon', 'Netherlands', 'Spain', 'Nigeria', 'Australia', 'Argentina', 'Algeria']