-
题目描述:
-
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
-
输入:
-
输入的第一行包括一个整数N(1<=N<=1000)。
接下来的一行包括N个整数。
-
输出:
-
可能有多组测试数据,对于每组数据,
找出这个数组中的两个只出现了一次的数字。
输出的数字的顺序为从小到大。
-
样例输入:
-
6 2 3 9 3 7 2
-
样例输出:
-
7 9
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.io.StreamTokenizer;
class Main
{
public static final boolean DEBUG = false;
public static int N = 30;
public BufferedReader cin;
public PrintWriter cout;
public StreamTokenizer tokenizer;
public int n;
public int[] arr;
public void init()
{
try {
if (DEBUG) {
cin = new BufferedReader(new InputStreamReader(
new FileInputStream("d:\\OJ\\uva_in.txt")));
} else {
cin = new BufferedReader(new InputStreamReader(System.in));
}
cout = new PrintWriter(new OutputStreamWriter(System.out));
tokenizer = new StreamTokenizer(cin);
} catch (Exception e) {
e.printStackTrace();
}
}
public String next()
{
try {
tokenizer.nextToken();
if (tokenizer.ttype == StreamTokenizer.TT_EOF)
return null;
else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER) {
return String.valueOf((int) tokenizer.nval);
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public boolean input()
{
String s = next();
if (s == null) return false;
n = Integer.parseInt(s);
return true;
}
public void solve()
{
arr = new int[n];
int tmp = 0;
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(next());
tmp ^= arr[i];
}
tmp = tmp & (-tmp);
int a = 0, b = 0;
for (int i = 0; i < n; i++) {
if ((arr[i] & tmp) != 0) a ^= arr[i];
else b ^= arr[i];
}
if (a > b) {
tmp = a;
a = b;
b = tmp;
}
cout.println(a + " " + b);
cout.flush();
}
public static void main(String[] args)
{
Main solver = new Main();
solver.init();
while (solver.input()) {
solver.solve();
}
}
}