当前位置: 首页 > news >正文

C语言编程题-单身狗

题号:BYTE1562

单身狗1

题目描述:一个数组中只有一个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4

只有5只出现1次,要找出5.

#include <stdio.h>
void func1(int nums[], int len)//1.暴力解法
{int i = 0;int j = 0;for (i = 0; i < len; i++){for (j = 0; j < len; j++){if ((j != i) && (nums[i] == nums[j])) break;//如果找到除本身之外与本身相同的数就不需要再找了,跳出循环if (j == len - 1) printf("%d ", nums[i]);   //除本身之外的数都比较完了}}
}
void func2(int nums[], int len)//2.巧妙运用异或操作符
{int i = 0;int temp = 0;  //数组所有数异或的结果//因为相同的数异或的结果是0且任何数与0异或的结果是其本身,故将所有数异或,得到两个不同数异或的结果for (i = 0; i < len; i++){temp ^= nums[i];}printf("%d", temp);}int main()
{int nums[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 };int len = sizeof(nums) / sizeof(nums[0]);func2(nums, len);return 0;
}

异或^的特性

1、两个相同的数异或的结果是0,例如5^5=0

2、任何数与0异或的结果都是它本身,例如5^0=5

3、异或满足交换律,a^b^a = a^a^b = 0^b = b

当一个数组中有一个单身狗时,由以上特性可得:a^b^c^b^a=c,可以很快得到单身的数值。

单身狗2

题目描述:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4,6

只有5和6只出现1次,要找出5和6.

#include <stdio.h>
//1.暴力解法,同上
//2.^的妙用
void func2(int nums[], int len,int *num1,int *num2)//利用指针直接将结果传出去
{int i = 0;int temp = 0;  //数组所有数异或的结果//因为相同的数异或的结果是0且任何数与0异或的结果是其本身,故将所有数异或,得到两个不同数异或的结果for (i = 0; i < len; i++){temp ^= nums[i];}//得到两个不同的数相异的任何一位,如6(110)和4(100)异或的结果是010,第二位两个不同的数,一个数这一位是0//另一个就一定是1,可以由这一位将原本的数组分为两个组,其中一个组的这一位都是0,另一个组的这一位都是1//这样至少可以将两个不同的数分出来,其余成对的数一定在同一个组里。两个组再分别异或就可以得到两个不同的数。int bit = 0;//第几位异或的结果是1for (i = 0; i < 32; i++){if (temp & (1 << i))//按位&的优先级没有<<高,()加不加都可以{bit = i;break;}}for (i = 0; i < len; i++){if (nums[i] & (1 << bit)){*num1 ^= nums[i];}else{*num2 ^= nums[i];}}}int main()
{int nums[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4, 6 };int len = sizeof(nums) / sizeof(nums[0]);int num1 = 0, num2 = 0;func2(nums, len, &num1, &num2);printf("%d %d", num1, num2);return 0;
}

相关文章:

  • Unity_FairyGUI发布导入Unity编辑器资源报错
  • 通配符匹配
  • 《C++新经典设计模式》之第7章 单例模式
  • C语言实现Hoare版快速排序(递归版)
  • 【前端八股】系列之性能指标与评估工具
  • python单例模式
  • 钉钉 × E签宝,打通系统屏障,实现钉钉审批通过后自动同步到E签宝发起签署并返回拖章链接全流程自动化
  • spring的事务传播行为
  • 推免那些事
  • 【华为机试】2023年真题B卷(python)-堆栈中的剩余数字
  • 数据结构之Map/Set讲解+硬核源码剖析
  • 什么是供应链安全及其工作原理?
  • Facebook广告系统结构
  • 【MODBUS】libmodbus库写一个Modbus TCP客户端
  • 优雅玩转实验室服务器(一)登录服务器
  • 10个最佳ES6特性 ES7与ES8的特性
  • codis proxy处理流程
  • CSS 三角实现
  • DOM的那些事
  • dva中组件的懒加载
  • ES6语法详解(一)
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java中具有继承关系的类及其对象初始化顺序
  • python学习笔记 - ThreadLocal
  • 从输入URL到页面加载发生了什么
  • 面试遇到的一些题
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端攻城师
  • 区块链分支循环
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 白色的风信子
  • 【云吞铺子】性能抖动剖析(二)
  • 从如何停掉 Promise 链说起
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (java)关于Thread的挂起和恢复
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (七)Java对象在Hibernate持久化层的状态
  • (四) 虚拟摄像头vivi体验
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • ****Linux下Mysql的安装和配置
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net MVC4 上传大文件,并保存表单
  • .NET 常见的偏门问题
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中的轻量级线程安全
  • .NET正则基础之——正则委托
  • /*在DataTable中更新、删除数据*/
  • @Import注解详解
  • @RequestBody的使用
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解