• 知乎上的一道题目 如何判断某个二进制数如是否存在两位1中间有包含0的情况?


    https://www.zhihu.com/question/52999719

    如何判断某个二进制数如是否存在两位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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    一、cocos2d-x 3.0 final使用httpclient编译到android,须要用到的android.mk
    lvchange的available參数
    基于谱减法的声音去噪
    ios使用openUrl进行应用跳转
    linux下ssh免密登陆
    字体图标 icon font
    hdu 3642 Get The Treasury(扫描线)
    3D游戏引擎一 win32编程
    Codeforces 112B-Petya and Square(实现)
    动态规划 is beginning。。。。。。。。。
  • 原文地址:https://www.cnblogs.com/itdef/p/6494506.html
Copyright © 2020-2023  润新知