文档章节

熄灯问题——全代码

o
 osc_z1hvg4cu
发布于 2018/04/24 21:09
字数 543
阅读 6
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

 1 #include <iostream>
 2 #include <cstring>    //memset(),memcpy头文件
 3 using namespace std;
 4 
 5 //获取第j位
 6 int Getbit(int num,int j)
 7 {
 8     return (num >> j)&1;
 9 }
10 //设置第j位
11 void Setbit(char& num,int j, int s)
12 {
13     if(s)
14         num |= (1 << j);
15     else
16         num &= ~(1 << j);
17 }
18 //反转第j位
19 void Flipbit(char& num,int j)
20 {
21     num ^= (1 << j);
22 }
23 
24 int main(int argc,char* argv[])
25 {
26     char orilight[5];//原始灯状态
27     char curlight[5];//当前灯的状态
28     char result[5];  //结果
29     int switchs;     //开关状态
30     bool flag = false;//判断是否有结果
31     
32     //初始化原始灯状态
33     memset(orilight,0,sizeof(orilight));
34     for(int i = 0;i < 5;++i)
35         for(int j = 0;j < 6;++j)
36         {
37             int single;
38             cin >> single;
39             Setbit(orilight[i],j,single);
40         }
41     //确定结果
42     for(int n = 0;n < 64;++n)
43     {
44         switchs = n;
45         memcpy(curlight,orilight,sizeof(orilight));//每执行一次枚举就将原始灯的状态存到当前灯矩阵中
46                                                    //以保证每次测试结果都不会改变原始状态
47         //处理每一行灯的状态
48         for(int i = 0;i < 5;++i)
49         {
50             result[i] = switchs;
51             for(int j = 0;j < 6;++j)
52             {
53                 if(Getbit(switchs,j))
54                 {
55                     if(j > 0)
56                         Flipbit(curlight[i],j - 1);
57                     Flipbit(curlight[i],j);
58                     if(j < 5)
59                         Flipbit(curlight[i],j+1);
60                 }
61             }
62             //处理第i+1行灯的状态
63             if(j < 4)
64                 curlight[i+1] ^= switchs;
65             switchs = curlight[i];
66         }
67         //当第五行的灯熄灭时,找到结果
68         if(curlight[4] == 0)
69         {
70             flag = true;
71             break;
72         }
73     }
74     if(flag)
75     {
76         for(int i = 0;i < 5;++i)
77         {
78             for(int j = 0;j < 6;++j)
79             {
80                 cout << Getbit(result[i],j) << " ";
81             }
82             cout << endl;
83         }
84     }
85     else
86         cout << "no anwser" << endl;
87     
88     return 0;
89 }

补充:对于所需要的枚举次数,我们可以这样计算:因为我们只需要枚举第一行的灯的状态,而第一行有6盏灯,所以全排列就是26种,即我们只需枚举64次。

     当然,我们也可以枚举更少的次数,也就是只枚举32次(25),按列来枚举,这种方法可以考虑使用大小为6的char数组,每个数组存一列,其他过程

     如按行枚举。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
清华大学校园网登录工具--MyTunet

MyTunet 是一个能方便清华大学校园网用户登录网络的工具。有了 MyTunet,登录校园网、切换登录账号等任务将变得非常轻松。对于同时拥有普通帐号和包月帐号的你来说,不再需要像原来一样,先注...

匿名
2010/05/27
4.5K
0
【趣事】一根网线发起的攻击

刚上大学没多久,就遇到件头疼事。 富二代们刚来就带着笔记本电脑,这让咱们只能玩手机的屌丝辈们羡慕嫉妒恨。要命的事来了,晚上断电不断网,于是熄灯后笔记本仍然可以玩。 不巧的是,我们寝...

开源oschina
2015/03/17
203
4
【趣事】一根网线发起的攻击

点击蓝色“Java建设者”关注我哟 加个“星标”,欢迎来撩 刚上大学没多久,就遇到件头疼事。 富二代们刚来就带着笔记本电脑,这让咱们只能玩手机的屌丝辈们羡慕嫉妒恨。要命的事来了,晚上断...

cxuaner
05/08
0
0
在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”

(有一些图片我是直接从个人的CSDN博客上复制来的) 最近一个多月来,我曾经多次尝试在Ubuntu 16.04 LTS上使用g++和gcc(这俩好像合起来叫MinGW?)来编译C/C++代码,但是在解决所有语法问题后...

osc_db1n5a75
2019/01/03
3
0
第十八次CSP认证游记 | 2019.12.15

#随便写写 CSP认证的考试是Haogod介绍的,取得一定成绩之后能有机会参加CCSP的分赛区和全国决赛。这次来参加认证要感谢老师的奔走为我们申请学校的报销,虽然最终因为这不是比赛所以报名费和...

osc_r33mp6vv
2019/12/15
4
0

没有更多内容

加载失败,请刷新页面

加载更多

react+antd form 警告Warning: [antd: Form.Item] `children` is array of render props cannot have `name`.

如题所示,该警告出现在react与antd使用中,我们页面表单form中使用了Form.Item包含输入框,在username输入框的下面,加入了一行提示文字,代码如下: import React from 'react'import {Ca...

osc_ct0tt1cu
10分钟前
0
0
电子垃圾:物联网的另一面

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 我们所知道的世界与过去相比已经发生了巨大的变化,并通过技术继续发展。然而,这种...

osc_zls6dx9i
11分钟前
0
0
「数据库」sql刷题(No.1)

喜欢就 关注 我们吧! 简介: Hello 各位 ,我是公号「八点半技术站」的创作者 - Bruce.D (姓氏:豆)。 感谢微信给予的个人认证,专注于PHP、数据库技术领域知识经验分享。 技术的交流、不...

八点半的Bruce丶D
前天
0
0
UiPath获2.25亿美元E轮融资

在24个月的时间里,该RPA与AI领导企业的年度经常性收入从1亿美元增长到超过4亿美元;计划推进市场领先的超自动化平台,扩展云产品线 纽约--(美国商业资讯)--机器人流程自动化(RPA)软件领导...

osc_icwhzig7
12分钟前
7
0
Linux 选择内存分配机制

osc_gh0ost1g
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部