C语言——oj刷题——找单身狗2

简介: C语言——oj刷题——找单身狗2

题目名称:

寻找只出现一次的两个数字

题目内容:

在一个数组中,只有两个数字出现了一次,其他所有数字都出现了两次。本篇博客将介绍如何编写一个函数来找出这两个只出现一次的数字。

解题思路:

要解决这个问题,我们可以使用异或运算的性质来找出只出现一次的两个数字。异或运算(XOR)是一种位运算,当两个操作数的对应位不同时,结果为1,否则为0。具体步骤如下:


  1. 遍历整个数组,将所有数字进行异或运算。
  2. 异或运算具有交换律和结合律的性质,所以最终的结果将是两个只出现一次的数字的异或结果。
  3. 在异或结果中找到任意一个为1的位,记为bit。
  4. 再次遍历整个数组,将数组中所有数字的bit位为1的进行异或运算,得到的结果即为其中一个只出现一次的数字。
  5. 将得到的结果与异或结果进行异或运算,得到的结果即为另一个只出现一次的数字。

下面是使用上述思路编写的C代码示例:

#include <stdio.h>
 
void findSingleNumbers(int arr[], int n) {
    int xorResult = 0;
    int num1 = 0, num2 = 0;
 
    // Step 1: Perform XOR of all numbers in the array
    for (int i = 0; i < n; i++) {
        xorResult ^= arr[i];
    }
 
    // Step 2: Find a set bit in the XOR result
    int setBit = xorResult & ~(xorResult - 1);
 
    // Step 3: Perform XOR of all numbers with the set bit
    for (int i = 0; i < n; i++) {
        if (arr[i] & setBit) {
            num1 ^= arr[i];
        } else {
            num2 ^= arr[i];
        }
    }
 
    printf("只出现一次的两个数字为:%d 和 %d\n", num1, num2);
}
 
int main() {
    int arr[] = {1, 2, 3, 4, 5, 1, 2, 3, 4, 6};
    int n = sizeof(arr) / sizeof(arr[0]);
 
    findSingleNumbers(arr, n);
 
    return 0;
}

在上面的代码中,我们定义了一个函数findSingleNumbers来找出只出现一次的两个数字。函数接受一个整型数组arr和数组的长度n作为参数。在函数内部,我们使用异或运算来找到只出现一次的两个数字。最后,我们打印出结果。


希望这篇博客对你理解如何找出一个数组中只出现一次的两个数字有所帮助。如果你有任何问题或需要进一步的解释,请随时向我提问。

相关文章
|
3月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
1月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
13 0
|
4月前
|
算法 C语言
【C语言】单身狗问题
C语言中的单身狗问题
33 1
【C语言】单身狗问题
|
3月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
3月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
5月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
5月前
|
C语言
C语言刷题(循环结构程序设计)
C语言刷题(循环结构程序设计)
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
32 3
|
4天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
19 6