题意:求所给奇数个数的数中,输出奇数次的数。
由于:用哈希判重由于数据时2^31。栈的内存太大会溢出。
for(int i=0;i<n;i++)
{
cin>>temp;
if(number.count(temp))
number[temp]++;
else
number[temp]=1;
}
for(map<string,int>::iterator it=number.begin();it!=number.end();it++)
{
if(it->second%2==1)
{
cout<<it->first<<endl;
break;
}
}
学会map的使用。
但是基于a^0 = a;
a^a = 0;所以可以采用异或操作,偶数个的就变为0,奇数的则最终保留下来。
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d", &n) != EOF){
if(n == 0) break;
int x, ans;
ans = 0;
for(int i = 0; i < n; i ++){
scanf("%d", &x);
ans ^= x;
}
cout << ans << endl;
}
return 0;
}