问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写C语言程序解决白帽子、红帽子问题

发布网友 发布时间:2022-03-01 17:32

我来回答

1个回答

热心网友 时间:2022-03-01 19:02

这个问题我用5位二进制数来表示,总的可能排列有32种,逐一检验就可以找到答案,具体看代码:

#include <stdio.h>
#include <conio.h>
#define N 5
int main(){
    unsigned int bin,max,i,w,hat[N]={0};
    for(max=1,i=0;i<N;++i)max*=2;//计算max=2^N
    for(bin=0;bin<max;++bin){//用N位二进制数表示每个人的帽子状态,bin=00000~11111
        for(w=1,i=0;i<N;++i,w*=2){//获取每个人戴的帽子(0为红帽子,1为白帽子)
            hat[i]=((bin&w)!=0); //按位与来检测其帽子颜色
        }
        for(w=0,i=0;i<N;++i)w+=hat[i];//统计总的白帽子数
        //检验甲的说法
        if(hat[0]){//如果甲戴白帽子,说真话
            if(w-1!=1)continue;//但是除了甲外,白帽子数不是1,说明解错误,换下一组解
        }else{//甲戴红帽子,说假话
            if(w==1)continue;
        }
        //检验乙的说法
        if(hat[1]){
            if(w-1!=N-1)continue;
        }else{
            if(w==N-1)continue;
        }
        //检验丙的说法
        if(hat[2]){
            if(!(w-1==1&&hat[0]==0))continue;
        }else{
            if(w==1&&hat[0]==0)continue;
        }
        //检验丁的说法
        if(hat[3]){
            if(!(w-1==0))continue;
        }else{
            if(w==0)continue;
        }
        //检验戊的说法
        if(hat[4]){
            if(!(w-1==1&&hat[0]==0))continue;
        }//如果戊说了假话,其余情况都有可能
        for(i=0;i<N;++i){
            printf("%d ",hat[i]);
        }
        printf("\n");
    }
    printf("\nFinished!\n");
    getch();
    return 0;
}

最后运行的结果显示为:0 0 1 0 1,即甲红、乙红、丙白、丁红、戊白。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 我虚拟机下安装的红帽子忘记密码了怎么办? 红帽子 LINUX装好后中文显示为乱码,怎么解决? linux红帽子9.0安装。只求解决方法。 苹果8plus的siri 红帽子 5.5 下做双网卡绑定! &#47;proc&#47;net&#47;bonding&#47;bond0 文件不存在? 是什么原因! 如何解决! iphone8语音助手怎么开通 怎样保管土豆才能避免发芽以及变绿呢? 刚开始学编程,用什么编程软件好 刚学习C语言用什么学习软件好~!~!~! 如何获得硬盘序列号 刚学c语言,常用的编程软件是哪个? win10不激活,会怎么样? win10第一个正式版不激活会怎么样? 我试过,除了提醒要激活,没有影响。 win10未激活影响网络吗 win10不激活有什么影响 win10不激活有什么坏处 win10的电脑系统不激活对电脑有影响吗? 现在去学习C语言还有没有什么用处 win10专业版未激活有什么影响 win10没有永久激活会怎么样 红帽子下更换yum源出现了这个依赖,镜像源都找遍了,没有这些,该怎么解决? 谁能告诉我隐形眼镜的戴法,简单点,有视频的最好 红帽子linux系统修改了IP地址后启动慢 隐形眼镜的戴法第一次带怎么带 隐形眼镜的戴法和摘法 RHEl(红帽子linux5.4)安装PHP时出错一直没办法解决,帮忙解决一下! 小眼睛戴隐形眼镜有什么技巧吗? 红帽子linux系统如何用命令打开回收站 cad图形界限的设置? 如何做清蒸鲈鱼 在家怎么做清蒸鲈鱼? 如何做清蒸鲈鱼? 自己在家怎么做清蒸鱼 怎么做清蒸鲈鱼? 怎么做清蒸鲈鱼? 在家里怎么做清蒸鲈鱼 清蒸鲈鱼要怎样做 安装好了红帽子redhat9.0无法网络连接该如何搞好 红帽子系统怎么查找文件 被摘掉“红帽子”的行业协会应该怎么活