7-2奇抜な(20点)Pythonを探す


長さnの正の整数シーケンスでは、すべての奇数が偶数回、奇数が奇数回しか現れなかった.君の任務はこの奇抜なものを見つけることだ.
入力フォーマット:最初の行に正の整数n(≦10 4)を与え、その後の行にn個の問題面記述を満たす正の整数を与える.各数値は10 5を超えず、数値間はスペースで区切られています.
出力フォーマット:その奇抜な数を1行に出力します.テーマはこの奇抜さが存在することを保証します.
サンプルを入力:
12
23 16 87 233 87 16 87 233 23 87 233 16

出力サンプル:
233

作成者
たんい
コード長制限
時間の制限
メモリ制限
陳越
浙江大学
16 KB
400 ms
64 MB
問題解決の考え方:
この問題には3つの重要な判断点があります.
  • この数は奇数であるかどうか、奇数だけが奇数の特徴
  • を満たす.
  • この数字は何度も現れて、どのように
  • を統計します
  • この数字が奇数回であるか偶数回であるかをどのように判断するか
  • 対応の考え方:
  • 奇数のみが奇数数数の特徴を満たすため、%2の結果を判断し、偶数をフィルタリングすることができる.
  • は、各数の出現回数を格納するためにdictを宣言する.まずinでこの数字がdictにないと判断し、もし、直接value+1であれば、もしいなければ、この数がkeyvalueである1のキー値対
  • を追加する.
  • は、与えられた条件が1つの奇抜な数しか現れていないことを知っているからだ.したがって、dict.keys()を巡回し、keyに対応するvalueを手に入れてvalueが2で割り切れるかどうかを判断し、できない場合は、これが答えであり、このkeyを出力してプログラムを終了すればよい.

  • ACコード:
    n = input()		#          ,     ,    
    ques = list(map(int, input().split()))		#             
    temp = {
         }		#      
    for i in ques:		#         
        if i % 2 == 1:		#         (      ):
            if i in temp:		#              
                temp[i] = temp[i] + 1		#    , +1
            else:
                temp[i] = 1		#     ,         ,     1
    for i in temp.keys():	#    
        if temp[i] % 2 == 1:	#           
            print(i)	#    
            exit(0)		#    
    

    編集して、もう一つの解法を加えて、大物@C^superが提供した考え方に感謝します.
    問題解決の考え方:
    異或演算は、同じように0を出し、0でない数と0を異或演算した結果はそれ自体である.そのため、この特性を利用して異或演算をして偶数回現れた数字を除去することができ、最後の結果は必要な「奇抜な数」である.
    ACコード:
    n = input()  #   ,   
    ques = [i for i in list(map(int, input().split())) if i % 2 == 1]  #               
    ans = 0  #    ans
    for i in ques:
        ans ^= i  #              
    print(ans)  #     
    

    学習参考:
    コラム:Python論理演算子異またはxorについてhttps://zhuanlan.zhihu.com/p/96147159