利用Lambda解决蓝桥杯【消除尾一】问题
来源:互联网 发布:mysql ocp认证费用 编辑:程序博客网 时间:2024/06/05 18:03
C++ Lambda新技能GET
今天在做第七届蓝桥杯试题的时候,遇到一道题:
消除尾一
下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0
如果最后一位是0,则原数字保持不变。如果采用代码中的测试数据,应该输出:
00000000000000000000000001100111 00000000000000000000000001100000
00000000000000000000000000001100 00000000000000000000000000001100请仔细阅读程序,填写划线部分缺少的代码。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
乍一看,这果断得用一个函数来做呀!可是题中要求不能在横线外的其他地方写代码。这可就有点尴尬了!
突然脑袋灵光一现,不是有lambda嘛,妥了!
先看一下Lambda的表达式规范:
[ capture ] ( params ) mutable exception -> ret { body }
capture :指定了在可见域范围内外部变量的列表;
- [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
- [this] 以值的方式捕获 this 指针。
- [&] 以引用的方式捕获所有的外部自动变量。
- [=] 以值的方式捕获所有的外部自动变量。
- [] 不捕获外部的任何变量。
params :传入lambda表达式中的参数,和普通函数的函数列表相同,比如(int a, int b)。当然也可省略,相当于f();
mutable :被capture捕捉到的变量默认是const类型,不可修改。如果加上mutable之后便可以修改捕获对象的no-const变量;
exception :用于指定lambda表达式可以抛出的异常;
ret:是lambda的返回值类型,如果不写系统会自动从函数体的return语句推导。如果没有return语句即返回值为空。
{ body }:这里是函数体。
我的思路是这样的,从最后一位依次往前判断,一旦遇到0就停止。
先写一个简单的判断语句:x>>(3)&1
(用来判断倒数第四位数是1还是0)
那么接下来理所当然了:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
然后我们带入lambda表达式:
[&]()mutable{i=0;while(x>>(i++)&1);x>>=i;x<<=i;return x;}()
尾部的(),这对括号使得这个lambda表达式立即执行
因为我们需要利用外部变量,所以使用[&]来捕获,并且需要对变量进行修改,我们使用mutable。
检测一下运行结果,完美!
- 利用Lambda解决蓝桥杯【消除尾一】问题
- 利用Lambda解决蓝桥杯【消除尾一】问题
- 消除尾一
- 消除尾一
- 消除尾一
- 消除win7解决PC问题图标
- 利用复合索引解决性能问题一例
- 精品!解决你的心理问题!消除一切烦恼!
- 利用 typename 消除歧义
- 利用hash_map解决众数问题
- 利用栈解决迷宫问题
- 利用递归解决汉诺塔问题
- 利用“栈”解决“出轨”问题
- 利用synchronized解决哲学家问题
- 利用递归解决一些问题
- 利用二进制解决一些问题
- 试着用React写项目-利用react-router解决跳转路由等问题(一)
- 试着用React写项目-利用react-router解决跳转路由等问题(一)
- hdu1381 hash
- Apache Httpclient4.5学习笔记
- UNITY新手小游戏
- leetCode练习(134)(
- 计算FLT_MAX的整数位长度
- 利用Lambda解决蓝桥杯【消除尾一】问题
- 练习项目之---jdbc对面的女孩看过来
- cpp——与c之不同——指针
- linux下的基本操作02(文件相关命令)
- javaee 学习路线
- 排序算法(冒泡、选择、插入)
- 手机信息页面设置
- 论文格式的排版
- PAT1028人口普查