長さnの正の整数のシーケンスでは、すべての奇数が偶数回表示され、1つの奇数の奇数のみが奇数回表示されます。あなたの仕事はこの奇妙な花を見つけることです。
入力フォーマットは:
入力は、まず、正の整数N(≤10与える4)最初の行では、その後、次の行のタイトルの記述を満たす正の整数Nを与えます。各値は10超えない5、及び数は、スペースによって分離されています。
出力形式:
奇数を1行で出力します。タイトルは、この奇妙なものが存在することを保証します。
入力サンプル:
12
23 16 87 233 87 16 87 233 23 87 233 16
サンプル出力:
233
著者 | 単位 | コード長の制限 | 制限時間 | メモリ制限 |
---|---|---|---|---|
チェンユエ | 浙江大学 | 16 KB | 400ミリ秒 | 64 MB |
問題解決のアイデア:
この質問には、3つの重要な判断ポイントがあります。
- この数は奇数ですか?奇数のみが奇数の特性を満たします
- この数は数回出てきました、数え方
- この数が奇数または偶数回表示されるかどうかを判断する方法
対応するアイデア:
- 奇数のみが奇数の特性を満たすため、%2の結果を判断し、偶数を除外することができます。
dict
各番号の出現回数を格納するために1つを宣言します。最初に、in
この数を決定するには、存在しないdict
ダイレクトがあれば、value+1
しない場合は、この番号に追加するkey
、value
のための1
値の対- 質問の状態がわかっているので、1回だけ奇数が表示されます。したがって
dict.keys()
、トラバースするだけで、2で割り切れるかどうかのkey
対応するvalue
判断を得るvalue
ことができます。そうでない場合は、これが答えです。出力して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によって提供されたアイデアのおかげで、編集し、別のソリューションを追加します。
問題解決のアイデア:
XOR演算、0と同じ結果、および0以外の任意の数のXOR演算の結果はそれ自体です。したがって、この機能を使用してXOR演算を実行し、偶数の数値を削除できます。最終的な結果は、必要な「エキゾチックな数値」です。
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) # 输出结果
XOR学習リファレンス:
列を知る:Python論理演算子xorのXorについて話すhttps://zhuanlan.zhihu.com/p/96147159