P1469 找筷子
题目描述
经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!
CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?
输入格式
第一行是一个整数,表示筷子的数量 n。
第二行有 n个整数,第 i 个整数表示第 i根筷子的长度 a_i。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1
9
2 2 1 3 3 3 2 3 1
输出 #1
2
说明/提示
数据规模与约定
- 对于 30% 的数据,保证n≤10^5。
- 对于 100% 的数据,保证 1≤n≤107+1,1≤*ai*≤109。
提示
- 请注意数据读入对程序效率造成的影响。
- 请注意本题的空间限制为 4Mb。
题解一
package p1469;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
// 超内存
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
String numb[] = bf.readLine().split(" ");
bf.close();
HashMap<String,Integer> map = new HashMap<>();
for(int i=0;i<numb.length;i++) {
int count = 1;
if(map.containsKey(numb[i])) {
count =map.get(numb[i]);
count++;
}
map.put(numb[i],count);
}
String key = null;
int value;
// 获取键值对的迭代器
Iterator<Entry<String, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<String, Integer> entry = (Entry<String, Integer>) it.next();
key = (String) entry.getKey();
value = (int) entry.getValue();
if(value%2!=0) {
System.out.println(key);
return;
}
}
}
}
题解二
package p1469;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
// 快读快写
public static void main(String[] args) throws Exception{
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
st.nextToken();
int n = (int)st.nval;
int ans = 0;
for(int i=0;i<n;i++) {
st.nextToken();
ans ^= (int)st.nval;
}
pw.println(ans);
}
}