知乎上的一道题目 如何判断某个二进制数如是否存在两位1中间有包含0的情况?
https://www.zhihu.com/question/52999719
如何判断某个二进制数如是否存在两位1中间有包含0的情况?
请尽量用基础数学解答,遍历一类的就不用说了,无解的话也请说明下。
例如:111100或100000或000000都是1中间没有0;101010或100111这都属于除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; }
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力