見つけ、あなたの存在(2)
件名の説明:
新年のパーティーでは、誰もが特別な贈り物を受け取ることになります。彼らの贈り物を受け取るためにあなたの番を選択します。一つだけのあなたとなっているテーブルの上に贈り物の多くは、あります。これは、それぞれの贈り物に番号が付いています。そして、あなたのギフトの数は、他のすべての贈り物と同じではありません。あなただけの1の数は一度だけ表示されますがあると仮定することができます。例えば、彼らは擬似番号1,2,3,2,1た、5つの贈り物があります。だからあなたの贈り物は、そのラベル3のためです。3が一度登場ため。
入力
入力ファイルは、いくつかのケースで構成されます。
それぞれの場合は、整数N(1 <= N <1000000、及びnは奇数である)まずによって提示されるであろう。それに続いて、nは正の整数は2 ^ 31よりもすべての整数は意志小さく、行に説明します。これらの番号は= 0両端入力presents.nのカード番号を示しています。出力
それぞれの場合のために、あなたの現在のカード番号であるライン、出力整数。
サンプル入力
5 1 1 3 2 2 3 1 2 1 0サンプル出力
3 2
分析:
使用可能な列挙は、それぞれ、各番号が表示された回数、および登場の後、出力奇数を計算するが、これはあまりにも面倒です。この問題を解決するためのC言語利用可能XOR演算。
その答えによって:
#include <stdio.h>
int main()
{
int n,m,f;
while(scanf("%d\n",&n)!=EOF){
if(n==0)break; //若输入为0,则结束
scanf("%d",&f); //输入第一个数
n=n-1;
while(n--){ //输入剩下的数
scanf("%d",&m);
f^=m; //对输入的数进行异或,若相同则为0,相异则为1
} //f^0=f ,f^f=0
printf("%d\n",f); //最后答案为那个多余的数
}
return 0;
}