原以为这是一纯水题,就果断开了1000000了数组给它(1300多K),没想Memory果断超了,后来又用链表做(写了2000多K),再次无情的被Memory刷了,无耐百度一下,竟然发现别人的代码才300多B(表示我的有2000多B),发现自己的方法OUT了。
这段代码中最重要的是异或思想;相同的数异或后为0,0再和那个唯一的数异或(异或满足交换律,所以“礼物”,在前面出现和在最后出现没有区别,结果不变),结果即为那个不相同的数.杭电的测试数据太弱了,如果n为7, 3个1,3个2,一个3,结果就错了。( 异或在本空间有介绍,如有不明,可以see一see
代码
1 #include <stdio.h>
2 int main ( )
3 {
4 int n,odd,x;
5 while ( scanf ( "%d" , &n ) == 1 && n )
6 {
7 odd = 0;//初始化
8 while ( n-- )
9 {
10 scanf ( "%d" , &x );
11 odd ^= x;//对每个数异或
12 }
13 printf ( "%d\n" , odd );
14 }
15 return 0;
16 }
17
18
19
2 int main ( )
3 {
4 int n,odd,x;
5 while ( scanf ( "%d" , &n ) == 1 && n )
6 {
7 odd = 0;//初始化
8 while ( n-- )
9 {
10 scanf ( "%d" , &x );
11 odd ^= x;//对每个数异或
12 }
13 printf ( "%d\n" , odd );
14 }
15 return 0;
16 }
17
18
19