您的位置:首页 > 其它

题目1256:找出两个只出现了一次的数字

2014-05-27 23:54 337 查看
题目描述:

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
输入:

输入的第一行包括一个整数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
;
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐