如何判断某个二进制数如是否存在两位1中间有包含0的情况?
2017-03-03 09:40
405 查看
https://www.zhihu.com/question/52999719
知乎上的一道题目
如何判断某个二进制数如是否存在两位1中间有包含0的情况?
请尽量用基础数学解答,遍历一类的就不用说了,无解的话也请说明下。
例如:111100或100000或000000都是1中间没有0;101010或100111这都属于除1之外有多个0相连的情况。
回答中使用多次取反来确定连续1和连续0 的位置 再以两次取反结果相乘判断是否符合条件
不过使用状态机来解决也不失为一个办法
知乎上的一道题目
如何判断某个二进制数如是否存在两位1中间有包含0的情况?
请尽量用基础数学解答,遍历一类的就不用说了,无解的话也请说明下。
例如:111100或100000或000000都是1中间没有0;101010或100111这都属于除1之外有多个0相连的情况。
回答中使用多次取反来确定连续1和连续0 的位置 再以两次取反结果相乘判断是否符合条件
不过使用状态机来解决也不失为一个办法
#include <iostream> enum STATE { ORI, ONE, ONEZERO, ONEZEROONE }; bool check(int M) { STATE s = ORI; while (M != 0) { char ch = M & 0x1 ? '1' : '0'; switch (s) { case ORI: if (ch == '1') s = ONE; break; case ONE: if (ch == '0') s = ONEZERO; break; case ONEZERO: if (ch == '1') return false; } M = M >> 1; } if (s == ONE || s == ONEZERO) return true; return false; } int main() { std::cout << check(184) << std::endl; std::cout << check(120) << std::endl; return 0; }
相关文章推荐
- VB学习8_VBA如何模糊判断包含某关键字的文件是否存在?
- 如何判断链表是否存在环和求链表中间节点
- 如何判断一个字符串中是否包含另一个字符串
- 如何判断电脑电源是否烧坏!不用替换的情况下!
- 正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
- 如何判断一个已知的表中是否存在某个字段,如果不存在就创建它.
- 如何判断一个已知的表中是否存在某个字段,如果不存在就创建它.
- 如何判断文件是否存在?
- 在SQL中如何判断指定的列名是否存在
- 如何判断文件文件夹是否存在
- Ajax的应用:用过Ajax来实现不刷新页面的情况下判断用户是否存在
- 浅谈如何分类判断PB当中指定对象是否存在?(原创)
- oracle 基础和管理 如何判断某个表中是否存在某个字段?
- 如何判断临时表是否存在
- unix下如何判断一个文件夹是否存在?
- 如何判断表中某一字段是否存在?
- 如何判断 单链表中是否存在环 ( How judges in Singly Linked List whether has a circle )
- 判断元素是否为空,是否存在,元素值=sss,y元素值包含aa
- 如何判断一个文件或目录是否存在
- 如何判断数据库中某张表是否存在约束