【程序设计与算法】熄灯问题
来源:互联网 发布:linux 解压war 编辑:程序博客网 时间:2024/06/06 05:50
问题讲解:
代码如下:
#include <iostream>#include<memory>#include<cstring>#include<string>using namespace std;char oriLinghts[5];//存放输入原始的灯char lights[5];//变化灯的矩阵char result[5];//最终结果矩阵int GetBit(char c,int i)//取c的第i位的情况{ return (c >> i) & 1;}void SetBit(char & c,int i, int v)//设置字符c的第i位改为v{ if(v){//v是1 c |= ( 1 << i);//c的第i位变成1 } else { c &= ~(1 << i);// }}void FlipBit(char &c , int i)//把c的第i位翻转{ c ^=( 1 << i);//异或运算}void OutputResult(int t,char result[]){ cout << "PUZZLE #" << t << endl; for(int i = 0;i < 5 ; ++i){ for(int j = 0; j < 6 ; ++j){ cout << GetBit(result[i],j); if(j < 5) cout << " "; } cout << endl; }}int main(){ int T; cin >> T; for(int t = 1 ; t<= T ; ++t){ for(int i = 0 ;i < 5;++i) for(int j = 0;j < 6; ++j){ int s; cin >> s; SetBit(oriLinghts[i],j,s); } for(int n = 0;n < 64 ; ++n){ int switchs = n; memcpy(lights,oriLinghts,sizeof(oriLinghts));//复制orilights到lights for(int i = 0;i < 5;++i){ result[i] = switchs; for(int j = 0;j< 6; j++){ if(GetBit(switchs,j)){ if (j > 0) FlipBit(lights[i],j-1); FlipBit(lights[i],j); if ( j < 5) FlipBit(lights[i],j+1); } } if(i < 4 ) lights[i + 1] ^= switchs; switchs = lights[i]; } if(lights[4] == 0){ OutputResult(t,result); break; } } } return 0;}
阅读全文
0 0
- 【程序设计与算法】熄灯问题
- 枚举算法--熄灯问题
- 算法基础_熄灯问题
- 算法设计之枚举 熄灯问题
- 熄灯问题
- 熄灯问题
- 熄灯问题
- 熄灯问题
- 熄灯问题
- 熄灯问题
- 枚举-熄灯问题(算法基础 第2周)
- 算法学习之枚举--熄灯问题POJ1222EXTENDED LIGHTS OUT
- 1813:熄灯问题(2.1基本算法之枚举)
- POJ 1222 熄灯问题
- POJ 2811 熄灯问题
- POJ-2811:熄灯问题
- POJ熄灯问题
- 枚举--熄灯问题
- Codeforces Round #426(div2)
- 杂题 区间第K大(kth)
- GREAT + SWERC = PORTO UVALive
- C语言入门:累加a个n构成的整数之和,求a+aa+aaa+…+aa…a(n个a)
- Date 得到日期返回相应内容
- 【程序设计与算法】熄灯问题
- windows环境下redis安装和基本命令
- 关于static静态的一些知识(个人总结)
- 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的?(第七届蓝桥杯B组
- 支持向量机(SVM)理解以及在sklearn库中的简单应用
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- JavaScript全局函数
- 排序五:冒泡排序
- 第十二天总结