zoukankan      html  css  js  c++  java
  • C语言:一个数组中只有两个数字是出现一次

     1 //1.一个数组中只有两个数字是出现一次,
     2 //其他所有数字都出现了两次。
     3 //找出这两个数字,编程实现。a
     4 
     5 //^=单独两个数的^结果
     6 //单独出现的两个数不同位的标记
     7 //position:   ^结果中第一个出现1的位置
     8 //position位两个数肯定有一个为0 ,一个为1
     9 //把数组分成两部分
    10 //1:position为1
    11 //2:position为0
    12 //每一部分都有一个只出现一次的数字,其他的都是成对出现
    13 //每一部分^结果为单独出现的数字
    14 #include<stdio.h>
    15 #include<stdlib.h>
    16 
    17 int main()
    18 {
    19     int arr[] = { 1, 3, 4, 5, 6, 6, 5, 1 };
    20     int len = sizeof(arr) / sizeof(arr[0]);
    21     int ret = 0;
    22     int i = 0;
    23     int pos = 0;
    24     int x = 0;
    25     int y = 0;
    26     //整体^一次
    27     for (i = 0; i < len; i++)
    28     {
    29         ret ^= arr[i];
    30     }
    31     //寻找第一个1的位置
    32     for (i = 0; i < 32; i++)
    33     {
    34         if ((ret >> i) & 1 == 1)
    35         {
    36             pos = i;
    37             break;
    38         }
    39     }
    40     //把数组分成两部分
    41     for (i = 0; i < len; i++)
    42     {
    43         //如果pos位置为1
    44         if (((arr[i] >> pos)&1)==1)
    45         {
    46             x ^= arr[i];
    47         }
    48         //位置为0
    49         else
    50         {
    51             y ^= arr[i];
    52         }
    53     }
    54     printf("%d %d", x, y);
    55     system("pause");
    56     return 0;
    57 }
  • 相关阅读:
    (九)分类展示上
    (八)用户退出
    (七)用户登陆
    opencord视频截图
    (六)电子邮件
    (五)密码加密
    (四)用户注册
    (三)首页处理
    this关键字在继承中的使用
    03.swoole学习笔记--web服务器
  • 原文地址:https://www.cnblogs.com/Duikerdd/p/9940819.html
Copyright © 2011-2022 走看看