【C语言】数组中寻找唯一一对情侣

本文介绍了一种使用位操作解决数组中寻找仅出现一次的两个数字的方法。通过两层循环遍历数组,利用异或运算特性来识别这些数字。文章提供了一个具体的C语言实现示例。

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
找出这两个数字,编程实现。
思路:
1. 用两层循环嵌套用每个元素分别和数组中的所有元素进行相与
2. 如若两数相与为0,则返回该值。循环结束


#include<stdio.h>
#include<assert.h>
#include<windows.h>
int* findCoupleElemes(int arr[], int n);

int main()
{
    int arr[] = { 1, 2, 3, 4, 3, 5 };
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("the couple number is :%d\n\n", findCoupleElemes(arr, n));

    system("pause");
    return 0;
}

//定义查找函数
int* findCoupleElemes(int arr[], int n)
{
    assert(arr);
    int i = 0, j = 0;

    for (i = 0; i < n; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (((arr[i]) ^ (arr[j])) == 0)  //根据位操作特性,两个相等的数相与之后为0
            {
                return (arr[i]);             //两个数相等则返回该数
            }
        }
    }

    return NULL;
}

输出:3
这里写图片描述

### C语言 L1-035 情人节 编程题解析 情人节是一个经典的编程练习,旨在通过给定的情侣编号来判断情侣是否在一起。对于这个问题,输入是一系列情侣的编号对以及查询请求,输出则是根据这些请求返回的结果。 #### 输入描述 程序接收多组测试数据。每组测试数据的第一行为两个整数N (0<N≤50,000),表示有N对情侣;M(0<M≤10,000),表示要处理的关系询问数量。随后的一行包含2×N个正整数,代表按照顺序给出的所有人的ID号,其中第一个人和第二个人组成一对情侣,以此类推。最后M行中的每一行都含有两个人的名字(即他们的ID),用于询问这两人是不是情侣关系[^1]。 #### 输出要求 针对每一个询问,在单独的一行上打印"Yes"如果他们是情侣,否则打印"No"[^1]。 #### 实现思路 为了高效地解决此问题,可以采用哈希表存储每对情侣的信息。当接收到查询时,只需检查这两个ID是否存在于同一个键值下即可快速得出结论。 下面是具体的实现方法: ```c #include <stdio.h> #define MAX_N 50000 * 2 + 10 // 考虑到数组越界的情况预留一些空间 int main() { int N, M; scanf("%d %d", &N, &M); int id[MAX_N]; for(int i = 0; i < 2*N; ++i){ scanf("%d", &id[i]); } while(M--){ int a,b; scanf("%d%d",&a,&b); char flag='N'; for(int j=0;j<2*N;j+=2){ if((id[j]==a && id[j+1]==b)||(id[j]==b&&id[j+1]==a)){ flag='Y';break; } } printf("%s\n",(flag=='Y')?"Yes":"No"); } return 0; } ``` 上述代码实现了读取输入并构建情侣映射的功能,并能够响应关于任意两个人之间是否存在情侣关系的查询请求。该算法的时间复杂度主要取决于内层循环遍历寻找匹配的过程,但在实际应用中表现良好,因为通常情况下情侣的数量远小于最大限制[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值