zoukankan      html  css  js  c++  java
  • NYOJ 528 找球号(三)

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,res,n;
     5     while(~scanf("%d",&n)){
     6         res=0;
     7         while(n--){
     8             scanf("%d",&i);
     9             res^=i;
    10         }
    11         printf("%d\n",res);
    12     }
    13     return 0;
    14 } 

    我们先了解一下位异或的运算法则吧:

    1、a^b = b^a。

    2、(a^b)^c = a^(b^c)。

    3、a^b^a = b。

    对于一个任意一个数n,它有几个特殊的性质:

    1、0^n = n。

    2、n^n = 0。

    所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。

    还可以用STL中的set容器,不过好像没有上面的效率高,贴上代码:

     1 #include<iostream>
     2 #include<set>
     3 using namespace std;
     4 int main()
     5 {
     6     int i,n;
     7     set<int>s;
     8     while(cin>>n){
     9         while(n--){
    10             cin>>i;
    11             if(s.find(i)==s.end())
    12                 s.insert(i);
    13             else
    14                 s.erase(i);
    15         }
    16         cout<<*s.begin()<<endl;
    17         s.clear();
    18     }
    19     return 0;    
    20 }
  • 相关阅读:
    redis 集群
    redis--主从复制
    redis--AOF
    React——组件
    React——文件夹分析
    WEB面试
    WEB基础——接收后台文件方法
    WEB基础——AJAX
    C#进阶——IOC
    C#基础——HttpContext
  • 原文地址:https://www.cnblogs.com/shihuajie/p/2973749.html
Copyright © 2011-2022 走看看