有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行
– 每个按钮的位置上有一盏灯
– 当按下一个按钮后, 该按钮以及周围位置(上边, 下边,
左边, 右边)的灯都会改变状态
26熄灯问题 POJ1222
– 如果灯原来是点亮的, 就会被熄灭
– 如果灯原来是熄灭的, 则会被点亮
• 在矩阵角上的按钮改变3盏灯的状态
• 在矩阵边上的按钮改变4盏灯的状态
• 其他的按钮改变5盏灯的状态
27熄灯问题 POJ1222
 与一盏灯毗邻的多个按钮被按下时,一个操作会抵消另一次操
作的结果
 给定矩阵中每盏灯的初始状态,求一种按按钮方案,使得所有
的灯都熄灭熄灯问题 POJ1222
 输入:
– 第一行是一个正整数N, 表示需要解决的案例数
– 每个案例由5行组成, 每一行包括6个数字
– 这些数字以空格隔开, 可以是0或1
– 0 表示灯的初始状态是熄灭的
– 1 表示灯的初始状态是点亮的
29熄灯问题 POJ1222
 输出:
– 对每个案例, 首先输出一行,
输出字符串 “PUZZLE #m”, 其中m是该案例的序号
– 接着按照该案例的输入格式输出5行
• 1 表示需要把对应的按钮按下
• 0 表示不需要按对应的按钮
• 每个数字以一个空格隔开

代码如下:

#include <iostream>
#include<string.h>
using namespace std;
char Oright[5];
char Light[5];
char Result[5];
void SetChar(char &  t,int j,int s);
void OutPut(char * t);
int GetChar(char  t,int j);
void Flip(char & s,int i);
int main()
{int switches;for(int i=0;i<5;i++)//一个位一个位的存储。
    {for(int j=0;j<6;j++){int s;cin>>s;SetChar(Oright[i],j,s);}}for(int i=0;i<64;i++){memcpy(Light,Oright,sizeof(Oright));switches=i;for(int j=0;j<5;j++)//对于i的值,每行开始测试
        {Result[j]=switches;//Result存储的是开关的按压方案。for(int k=0;k<6;k++)//每列开始测试
            {if(GetChar(switches,k)){if(k>0)Flip(Light[j],k-1);//左边开始变化
                    Flip(Light[j],k);if(k<5)Flip(Light[j],k+1);//右边开始变化
                }}if(j<4)Light[j+1]^=switches;switches=Light[j];}if(Light[4]==0){cout<<"结束!"<<endl;OutPut(Result);break;}}return 0;
}
void Flip(char & s,int i)
{s=s^(1<<i);
}
int GetChar(char  t,int j)
{return (t>>j)&1;
}
void SetChar(char & t,int j,int s)
{if(s==1)t=t|(1<<j);elset=t&(~(1<<j));
}
void OutPut(char * t)
{for(int i=0;i<5;i++){for(int j=0;j<6;j++){cout<<GetChar(t[i],j);cout<<"   ";}cout<<endl;}
}

转载于:https://www.cnblogs.com/JsonZhangAA/p/7261668.html

C++基础算法学习——熄灯问题相关推荐

  1. 【基础】基础算法学习笔记(状态空间)

    基础算法学习笔记(状态空间) 一.状态空间 1.定义(什么是状态空间):一个实际问题的各种可能情况构成的集合.(解释:为什么需要算法来和程序来处理问题?如果一道题可以手算得到答案,换句话说就是存在通过 ...

  2. 基础算法学习大纲(附加yxc大佬算法模板)

    基础算法学习大纲总结 学习算法路线 1.基础算法 模板 1.排序 2.二分 3.高精度 4.前缀和与差分 5.双指针算法 6.位运算 7.离散化 8.区间合并 2.数据结构 模板 1.链表与邻接链表( ...

  3. 算法简介及计算机算法基础——算法学习(四)

    文章目录 关注算法缘由 描述计算机算法基础 描述运行时间 循环不变式 参考文档 接下来的算法学习内容主要根据<程序员必读经典(算法基础+计算机系统)>一书而写,作为读书笔记,感兴趣的可以见 ...

  4. 小白机器学习基础算法学习必经之路

    https://www.toutiao.com/a6657427848900379150/ 2019-02-14 15:21:13 未来,人工智能是生产力,是变革社会的主要技术力量之一. 掌握人工智能 ...

  5. 基础算法学习(二)_二叉树及应用赫夫曼编码

    这次学习的重点在于二叉树的性质.链式存储结构(也就是C语言的struct)和赫夫曼编码,学习的教材是清华大学出版社出版的C语言版数据结构. 首先是二叉树:     二叉树(Binary Tree)是另 ...

  6. 基础类与基础算法学习

    常用的类 1 .date类 date a=new date();//默认为当前时间 注:要求时间是标准时间还是中国时间 date可带入参数 eg:long x=10086l;即为1970.1.1.00 ...

  7. C++基础算法学习——完美立方

    形如a 3 = b 3 + c 3 + d 3 的等式被称为完美立方等式.例如 12 3 = 6 3 + 8 3 + 10 3 .编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, ...

  8. ACM基础算法入门及题目列表

    对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...

  9. 人工智能算法:卷1基础算法+卷2受大自然启发的算法+卷3深度学习和神经网络电子书

    ISBN:9787115005786 包装:平装 字数:538000 页数:598 版次:7 开本:16开 用纸:胶版纸 正文语种:中文 人工智能算法:卷1基础算法+卷2受大自然启发的算法+卷3深度学 ...

最新文章

  1. 每天都在用 Map,这些核心技术你知道吗?
  2. 《软件观念革命——交互设计精髓》读书笔记(一)
  3. 计算机怎么设置计算机组和用户,怎样设置同一工作组的计算机资源共享
  4. Visual Studio 2010 Ultimate敏捷功能特性(上)
  5. nyoj990蚂蚁感冒
  6. 中石油训练赛 - 奎奎画画(思维+并查集+离线处理)
  7. SQL Server遗失管理权限账号密码怎么办?
  8. c语言只能最大值不能最小值,用c语言编写输入10个无序的整数,去掉一个最大值和最小值,然后求其平均值...
  9. 自定义 Spark item 的渲染器
  10. .net、mono和C#
  11. [走走看看]转载两篇文章:挂牌和追经
  12. Linux文件类型与文件权限详解(三)
  13. verilog 之数字电路 边沿检测电路
  14. idea使用svn拉取项目代码_IDEA使用svn下载项目,并配置svn项目和tomcat进行访问
  15. 2055041-21-7,Acid-PEG4-S-PEG4-acid在EDC和HATU等活化剂存在下,羧酸基团可与伯胺反应
  16. 微信公众号开发 糟糕的体验_糟糕的开发人员–好老板
  17. JavaFX入门(一):我的第一个JavaFX程序
  18. 19 「沉淀」,20「继续沉淀」
  19. 无法连接到宽带连接被远程计算机终止,无法连接到宽带连接?
  20. 2.阿里实人认证 .net 准备工作2 转换demo

热门文章

  1. 深入理解ThreadLocal变量的功能和使用
  2. 中考可用计算机吗,中考能用什么计算器 可以带电子手表吗
  3. android mimetype类型,如何确定android中的MIME类型?
  4. matlab图像处理 推荐,Matlab计算机视觉、图像处理工具箱推荐
  5. 西门子real是什么数据类型_如何实现西门子新一代精智屏及基本屏与 S120 的直接通讯...
  6. bat如何执行完上一条命令_一条更新语句是如何执行的?
  7. win10语音语言服务器,win10系统:朗读女语音库(发音人)安装方法说明
  8. php修改ip6地址为ip4,CentOS7 设置静态IPv6/IPv4地址
  9. java就业班学什么呀_传智播客JAVA就业班学习心得
  10. python 配置文件解析_python 解析配置文件