zoukankan      html  css  js  c++  java
  • 九度OJ 1256:找出两个只出现了一次的数字 (位运算)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:568

    解决:186

    题目描述:

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

    输入:

    输入的第一行包括一个整数N(1<=N<=1000)。
    接下来的一行包括N个整数。

    输出:

    可能有多组测试数据,对于每组数据,
    找出这个数组中的两个只出现了一次的数字。
    输出的数字的顺序为从小到大。

    样例输入:
    6
    2 3 9 3 7 2 
    样例输出:
    7 9

    思路:

    巧妙的利用异或位运算能高效的解决该问题。


    代码:

    #include <stdio.h>
    #include <string.h>
     
    #define N 1000
     
    int main()
    {
        int n, i;
        int a[N];
        int m, m1, m2, k;
        while(scanf("%d", &n)!=EOF)
        {
            m = 0;
            for (i=0; i<n; i++)
            {
                scanf("%d", &a[i]);
                m ^= a[i];
            }
            k = 1;
            while ((m&1) == 0)
            {
                m >>= 1;
                k <<= 1;
            }
            m1 = 0;
            m2 = 0;
            for (i=0; i<n; i++)
            {
                if ((a[i]&k) != 0)
                    m1 ^= a[i];
                else
                    m2 ^= a[i];
            }
            if (m1 <= m2)
                printf("%d %d
    ", m1, m2);
            else
                printf("%d %d
    ", m2, m1);
        }
        return 0;
    }
    /**************************************************************
        Problem: 1256
        User: liangrx06
        Language: C
        Result: Accepted
        Time:570 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    java generic type
    android avoiding-memory-leaks
    a various of context
    LruCache
    Java Reference
    SQL join
    Eclipse java中一个工程引用另一个工程的类
    java 匿名内部类的方法参数需要final吗?
    java的final
    如何将每一条记录放入到对应的范围中
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083809.html
Copyright © 2011-2022 走看看