ImageVerifierCode 换一换
格式:PPT , 页数:39 ,大小:309.50KB ,
资源ID:14207746      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14207746.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ACM入门之三位运算PPT格式课件下载.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ACM入门之三位运算PPT格式课件下载.ppt

1、a&b,a,b不需要是二进制数,是整数变量即可,11,按位与,例如:表达式“21&18”的计算结果是16(即二进制数10000),因为:21 用二进制表示就是:0000 0000 0000 0000 0000 0000 0001 0101 18 用二进制表示就是:0000 0000 0000 0000 0000 0000 0001 0010二者按位与所得结果是:0000 0000 0000 0000 0000 0000 0001 0000,12,按位与,按位与运算通常用来将某变量中的某些位清0或保留某些位不变。例如,如果需要将int型变量n的低8位全置成0,而其余位不变,则可以执行:n=n 如

2、何判断一个int型变量n的第7位(从右往左,从0开始数)是否是1?只需看表达式“n&0 x80”的值是否等于0 x80即可。,13,按位或,按位或运算符“|”是双目运算符。功能:将参与运算的两操作数各对应的二进制位进行或操作,只有对应的两个二进位都为0时,结果的对应二进制位才是0,否则为1。例如:表达式“21|18”的值是23(即二进制数10111)。按位或运算通常用来将某变量中的某些位置1或保留某些位不变。例如,如果需要将int型变量n的低8位全置成1,而其余位不变,则可以执行:n|=0 xff;,14,按位异或,按位异或运算符“”是双目运算符。将参与运算的两操作数各对应的二进制位进行异或操

3、作,即只有对应的两个二进位不相同时,结果的对应二进制位才是1,否则为0。表达式“21 18”的值是7(即二进制数111)。异或运算的特点如果 ab=c,那么就有 cb=a以及ca=b。此规律可以用来进行最简单的加密和解密。,15,按位非,按位非运算符“”是单目运算符。其功能是将操作数中的二进制位0变成1,1变成0。例如,表达式“21”的值是无符号整型数 0 xffffffea,而下面的语句:printf(%d,%u,%x,21,21,21);输出结果就是:-22,4294967274,ffffffea,16,左移运算符,左移运算符“”是双目运算符。其功能是将左操作数的各二进位全部左移若干位后得

4、到的值,右操作数指明了要左移的位数。左移时,高位丢弃,左边低位补0。左移运算符不会改变左操作数的值。,17,左移运算符,例如,常数9有32位,其二进制表示是:0000 0000 0000 0000 0000 0000 0000 1001因此,表达式“94”的值,就是将上面的二进制数左移4位,得:0000 0000 0000 0000 0000 0000 1001 0000即为十进制的144。实际上,左移1位,就等于是乘以2,左移n位,就等于是乘以2n。而左移操作比乘法操作快得多。特别注意:有符号数的左移溢出情况。,#include main()int n1=15;short n2=15;uns

5、igned short n3=15;unsigned char c=15;n1=15;n2=15;n3=15;c=6;printf(n1=%x,n2=%d,n3=%d,c=%x,c4=%d,n1,n2,n3,c,c 4);上面程序的输出结果是:n1=78000,n2=-32768,n3=32768,c=c0,c4=3072,左移运算符实例,19,右移运算符,右移运算符“”是双目运算符。其计算结果是把“”的左操作数的各二进位全部右移若干位后得到的值,要移动的位数就是“”的右操作数。移出最右边的位就被丢弃。对于有符号数,如long,int,short,char类型变量,在右移时,符号位(即最高位)

6、将一起移动,并且大多数C/C+编译器规定,如果原符号位为1,则右移时右边高位就补充1,原符号位为0,则右移时高位就补充0。,20,右移运算符,对于无符号数,如unsigned long,unsigned int,unsigned short,unsigned char类型的变量,则右移时,高位总是补0。右移运算符不会改变左操作数的值。实际上,右移n位,就相当于左操作数除以2n,并且将结果往小里取整。short n2=-15;unsigned short n3=0 xffe0;n1=n12;n2=3;n3=4;c=3;printf(n1=%x,n2=%d,n3=%x,c=%x,n1,n2,n3,

7、c);上面的程序输出结果是:n1=3,n2=-2,n3=ffe,c=1,右移运算符实例,22,思考题-位运算的妙用,有两个int型的变量a和n(0=n=31),要求写一个表达式,使该表达式的值和a的第n位相同。a=12345,n=3,a的第n位为:3,答案:(a&(1 n,位运算解决的常见问题,1.判断二进制下第i位是否是12.把二进制下第i位变为1 or 03.求一个数字二进制下有多少个1,异或运算的妙用,xor运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。xor运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(axorb)

8、xorb=a。xor运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 xor19880516=20665500,我就把20665500告诉MM。MM再次计算20665500 xor19880516的值,得到1314520,于是她就明白了我的意思。,HDU3782xxx定律,http:/Description对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+1后砍掉一半,直到该数变为1为止。请计算需要经过几步能将n变到1,具体可见样例。Input测试包含多个用例,每个用例包含一个整数n,当

9、n为0 时表示输入结束。(1=n=10000)Output对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行。,25,HDU3782xxx定律-数据样例,Sample Input3/5;8;4;2;1;1 0Sample Output5 0,26,Problem Description对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+1后砍掉一半;直到该数变为1为止。,标准程序,#include#include#includeint main()int n,time;while(scanf(%d,27,求数组中出现次数超过一半的元素,思路1:对于每一个数字,

10、枚举数组中所有的数字,统计有多少个数字跟它是一样的,如果超过了一半,就直接break并输出它。这样子做,时间复杂度是O(N*N),空间复杂度是O(N),并不是一个非常好的思路。,for(int i=1;in/2)coutarriendl;break;,求数组中出现次数超过一半的元素-循环法,求数组中出现次数超过一半的元素,思路2:利用C+中的map,快速的统计每一个数字出现的次数,每当读入一个数字的时候,maparri+,直接统计出每一个数字出现的次数:这个做法,时间复杂度是O(N*log(N),这里log(N)是每次用map查找一个数字所用到的时间。空间复杂度也是O(N),但是比思路1略大一

11、点。,map vis;for(int i=1;,求数组中出现次数超过一半的元素-Map法,求数组中出现次数超过一半的元素,思路3:利用中位数的性质。一个数字出现次数超过了一半,那么他们的中位数必然就是这个数字,因此可以利用中位数来求。最简单的办法就是,排序以后,直接输出最中间的那个数字。需要注意的是,中位数并不是arrn/2,而是arr(n+1)/2,具体证明过程略。排序的时间复杂度是O(nlogn),空间复杂度是O(n),sort(arr+1,arr+n+1);coutarr(n+1)/2;,求数组中出现次数超过一半的元素-中位数法,求数组中出现次数超过一半的元素,按二进制下的每一位来统计。

12、假设输入一共有5个数字,分别是1,2,1,1,3,那么他们用二进制表示分别是:01,10,01,01,11,统计一下每一个二进制位上1出现的次数。在二进制下第一位,1出现了4次,二进制下第二位,1出现了2次。这一位上1的次数出现次数没有N/2,说明答案这一位上肯定是0,反之,答案这一位上肯定是1!这样做,时间复杂度是O(N*32),空间复杂度却可以降低到O(33)O(1),因为数组的每一位不再需要保存了,直接读入一个处理一个就可以。,int num33;i0)numk+;/位运算的操作,对这两个数字做与操作,/例如,arri是1101,now是8也就是1000,那么他俩与之后的结果就是1000

13、/如果,arri是1101,now是2也就是0010,那么他俩与之后的结果就是0000/换句话说,如果二进制下对应那一位是0,与出来的结果就是0,否则则是一个大于0的数字 int now=1,ans=0;for(int k=0;kn/2)ans+=now;coutansendl;,求数组中出现次数超过一半的元素-二进制法,求数组中出现次数超过一半的元素-打架法,来看这样一个例子:5 1 5 4 1 1 3 1 2 1 1一共11个数字,其中1一共出现了6次。那么如何快速的找到这个6呢?我们来考虑这样一个现实生活中的例子:有一群人在打群架,他们每个人有一个编号,代表自己所处的势力,现在这一群人按照顺序依次往广场中央走,如果广场内现在有和自己不是一个势力的人,那么他就和其中一个同归于尽,问,最后哪一个势力的人会获胜?我们按照这个意思,再来看一下刚才这个例子:,求数组中出现次数超过一半的元素-势力法,1)势力5的一个人走进广场中央,现在广场中央有一个人,势力是52)势力1的一个人走进广场中央,他发现广场中央有一个势力是5的人,于是同归于尽,现在广场上没有人3)势力5的一个人走进广场中央,现在广场中央有一个人,势力是

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1