首页 > 其他分享 >C语言找画笔(全网最详)

C语言找画笔(全网最详)

时间:2022-10-10 21:01:59浏览次数:63  
标签:输出 最详 豆豆 画笔 C语言 异或 数组 排序

题目:

豆豆对数字的执着,让他在理科领域游刃有余,但他近乎疯狂的投入也使父母有些担心,为了让孩子能够全面发展,决定拓宽他的学习领域。正好家旁边有个绘画培训中心,父母就给豆豆报了名。学习绘画的第一天就让豆豆产生了浓厚的兴趣,还主动要求买了很多很多的画笔。画笔有多种颜色,豆豆有一个习惯就是同种颜色的画笔就买两支,一支备用,这样就总共攒了 N 支画笔(N 是偶数且 1<N<100000)。

可是数字的敏感无孔不入,豆豆脑里蹦出了一个奇怪的问题:如果蒙上眼任意拿走一支画笔,分析剩下的 N-1 支画笔就能找出拿走了哪种颜色,你能回答他吗?

输入格式:

第一行一个整数N(N 是偶数且 1<N<100000),表示剩下的画笔个数就是题目描述中的 N-1。

第二行 N-1 个用空格隔开的正整数 Ai(0<Ai<100000),表示剩下的画笔的颜色编号。

注意:数据保证有一个画笔的颜色编号出现了一次,其余的都出现了两次。

输出格式:

一个整数,表示拿走的画笔的颜色编号。

输入样例:

10
1 1 9 11 5 3 11 5 9

输出样例:

3

点睛:此题含义是在一组乱序数组里面,有多组相同的元素个数为2,只有一组数据的个数是1,本题需要将哪一个单独的数组查找出来。

解答:此题有两种算法。

法一:利用排序函数进行查找(因为sort函数只适用于C++,所以此法C语言不适用)

思路:

  1. 如何在不设置变量情况下,输入N?可以先开一个很大的数组,再进行变量输入。
  2. 此法核心在于如何在已经排序的数组里查询单个元素?因为元素已经排序完毕,相同的元素都是两个两个排序在一起,所以只需两个一查找,即在第二个for循环中i+=2非常重要!!!

C语言找画笔(全网最详)_数据

法二:利用按位异或操作符(重点!!!也是最难理解的)

首先,我们需要先回顾一下^操作符的运算规则。

  • 若两个数相同,则输出结果就是0,若两个数不同,输出结果就是1;
  • 任何值与自身异或,结果为0
  • 任何值与0异或,结果为其自身
  • 交换律 a^b^c=b^a^c
  • 结合律

我们了解之后,可以这样理解,我们在初始化数组内容后,都是两个相同为一组,只有一个落单,根据交换律,直接将两个相同放在一起,输出结果就是0;这时又根据任何值与0异或等于值本身,综上可以把落单的那一个直接输出。

C语言找画笔(全网最详)_数据_02




标签:输出,最详,豆豆,画笔,C语言,异或,数组,排序
From: https://blog.51cto.com/u_15740457/5745279

相关文章

  • 【C语言_20】const与#define的用法及区别
    1.const关键词的用法const在实际编程中用得并不多,const是constant的缩写,意思是“恒定不变的”!它是定义只读(不能修改)变量的关键字,或者说const是定义常变量的关键字。......
  • 221010嵌入式系统高级C语言编程_笔记
    C语言不检查数组越界和内存缓冲区越界编译器对局部变量有两种存储方式,对于简单数据类型的变量(比如int,char,short或者指针变量等)编译器会首先尽可能的采用CPU内部的通用寄存......
  • c语言整型变量用浮点型输出_转载
    C语言学习实践​​https://blog.csdn.net/solomon1558/article/details/40798901​​摘要本文将从C语言变量的本质,不同类型变量在内存中的存储方式,类型强制转换,格式输出4个......
  • 【C语言】用"I love you!"打印心形
    #include<iostream>#include<cmath>usingnamespacestd;intmain(){floatx,y;strings="Iloveyou!";intl=s.length();for(y=1.3f;......
  • 学习笔记275—C语言第2期(Windows11系统下解决VC6.0无法运行)
    Windows11系统下解决VC6.0无法运行1、右键点击图标—>选择“打开文件所在位置” 2、将“MSDEV”修改成“MSDEVL” 3、将此处“MSDEV.EXE”修改成“MSDEVL.EXE”......
  • C语言-数组打印图形
    例题:打印等腰三角形答案intmain(intargc,char*argv[]){ intn; scanf("%d",&n); inti,j,k;//  打印行打印星号打印空格。 for(i=1;i<=n;i++) { for(j=1;j<=......
  • 《C语言 —— void*的作用》
    1.void*类型指针void指针可以指向任意类型的数据,就是说可以用任意类型的指针对void指针对void指针赋值。int*a;void*p;p=a;a=(int*)p 如果要将void指针......
  • 转载:关于vscode(Visual Studio Code)编写c语言 中文乱码问题
    关于vscode(VisualStudioCode)编写c语言中文乱码问题。处理方法:选择菜单File > Preferences >Settings,找到TextEditor>Files中的Encoding,更改为Simplified......
  • C语言每日一题——第十二天
    第十二天小明今天要挑战一下算法!他的算法第一课是:二分查找。小明随意设置了一个函数:\(y=x^2+2x-1,x\in(-10^4,10^4)\)。他将使用二分法,找出给出的数字所在区间,精度为\(\p......
  • 【10月】C语言学习第1天
    指针符号&和*&用于指向变量数据位置,用十六进制表示*用于指向变量内存储的值-----------------------------------------函数对变量进行操控:由于函数返回只有一个值,固......