n个正整数构成的序列,其中有且仅有一个数在序列中出现了奇数次,其余的数均出现了偶数次。找出出现了奇数次的那个数。
这题有一个解法:从头到尾将这n个数异或一遍,得到的数即为要找的那个数。
如果有且仅有两个数出现了奇数次,那该怎么算出这两个数,用这个思路
#include <iostream>
using namespace std;
int main()
{
int n;
int *p;
while (cin >> n)
{
p = new int[n];
for (int i = 0; i < n; i++)
cin >> p[i];
int c = p[0];
for (int j = 1; j < n; j++) {
c = c^p[j];
}
for (int j = 0; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if ((c ^ (p[j] ^ p[k])) == 0) {
if (p[j] > p[k])
cout << p[k] << ' ' << p[j] << endl;
else
cout << p[j] << ' ' << p[k] << endl;
j = n;
}
}
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。