算法基础:北京大学

问题描述

Bilibili搬运地址:https://www.bilibili.com/video/av10046345/?p=4
建议如果视频第一遍没看懂,再看一遍就好了~.~

代码及注释

#include <stdio.h>int puzzle[6][8], press[6][8];//分别在上,左,右添加一行或一列用于处理边界问题//推测验证过程:
//根据第一行的情况,确定第二行的情况;然后用第二行的情况确定第三行,依次类推
bool guess()
{int c, r;//用当前行的状态来确定下一行的状态,for(r=1; r<5; r++) {for(c=1; c<7; c++) {//这里有点巧妙,位置(r,c)按一下,一共会影响周边4个点//如果要使得(r,c)的值为0,那么在press(r,c)+press(r-1,c)+press(r+1,c)+press(r,c-1)+press(r,c+1)的按下的值要和puzzle(r,c)的值共奇偶//换句话说( press(r,c)+press(r-1,c)+press(r+1,c)+press(r,c-1)+press(r,c+1) )%2 == puzzle(r,c)//由于仅仅press(r+1,c)未知,因此把上式转换一下即可。press[r+1][c]=(puzzle[r][c]+press[r][c]+press[r-1][c]+press[r][c-1]+press[r][c+1])%2;}}//判断最后一行是否可用熄灭,如果不能说明第一行按错,需要重新枚举for(c=1; c<7; c++) {if ((press[5][c-1]+press[5][c]+press[5][c+1]+press[4][c])%2 != puzzle[5][c]){return false;}}return true;
}//枚举过程:
//对press第1行的元素press[1][1]~press[1][6]的各种取值进行枚举
//即对第一行各种可能的按键方式都进行枚举,这里用了二进制的思路进行枚举
void enumerate()
{int c;for(c=1; c<7; c++) {//第一个枚举情况,就是都不按press[1][c]=0;}while(guess()==false) {press[1][1]++;c=1;//模拟二进制,即从000000->111111while(press[1][c]>1) {  //累加进位press[1][c]=0;c++;press[1][c]++;}}return ;
}int main()
{int cases, i, r, c;scanf("%d", &cases);//初始化置零pressfor(r=0; r<6; r++) {press[r][0]=press[r][7]=0;}for(c=0; c<7; c++) {press[0][c]=0;}for(i=0; i<cases; i++) {//注意这里循环从1开始,就是因为手工添加了一个边缘,要跳过for(r=1; r<6; r++) {for(c=1; c<7; c++) {scanf("%d", &puzzle[r][c]); //读入输入数据}}enumerate();printf("PUZZLE#%d\n", i+1);for (r=1; r<6; r++) {for (c=1; c<7; c++) {printf("%d ", press[r][c]);}printf("\n");}}return 0;
}

算法基础:熄灯问题的思考相关推荐

  1. 【python】一道LeetCode搞懂递归算法!#131分割回文串 #以及刷LeetCode的一点点小心得 [数据结构与算法基础]

    题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 所有可能的分割方案. # 示例 输入: "aab" 输出: [["aa",&q ...

  2. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  3. 【解题报告】2021牛客寒假算法基础集训营4

    [解题报告]2021牛客寒假算法基础集训营4 前面的话 A :九峰与签到题 | 模拟 (签到题) B: 武辰延的字符串 | exKMP D :温澈滢的狗狗 | 二分 E: 九峰与子序列 | d p d ...

  4. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  5. 算法基础、算法比赛快速入门(java)

    想用Java快速入门算法?这篇文章你得看! 提示:本文章适合想要入门算法,并且想 "快速" 达到一定成果的同学们阅读~ 文章非常非常非常长(可能是你见过最长的算法基础篇章)!!! ...

  6. 利用计算思维解决问题人和计算机都能完成,对计算思维能力养成与大学计算机基础课程改革的思考...

    对计算思维能力养成与大学计算机基础课程改革的思考 期次:第1913期 计算思维,这个颇具时代特征的名词,正在被越来越多的人们所熟悉与关注.可以说,它已经成为当代大学生一种必备的能力.今秋开学初,校教学 ...

  7. 《Python程序设计与算法基础教程(第二版)》江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究

    (还在更新中-) 这篇博客花费了我的大量时间和精力,从创作到维护:若认可本篇博客,希望给一个点赞.收藏 并且,遇到了什么问题,请在评论区留言,我会及时回复的 这本书对Python的知识点的描述很详细, ...

  8. 算法基础之二叉树理论

    算法基础之二叉树理论 1.树基础 2.二叉树基础 3.二叉树基本操作 3.1插入结点 3.2二叉树遍历 3.2.1 深度优先遍历 3.2.2 广度优先遍历 1.树基础 官方定义:树是n(n>=0 ...

  9. 牛客寒假算法基础集训营2:处女座的砝码(初遇三进制)

    牛客寒假算法基础集训营2:处女座的砝码(初遇三进制) 这是刷到牛客寒假集训营2里面的C题-处女座的砝码才知道的 首先,了解一下知乎上一位大佬的想法 地址:https://www.zhihu.com/q ...

最新文章

  1. 写一个 iOS 复杂表单的正确姿势
  2. 高手过招, 为什么 Redis Cluster 是16384个槽位?
  3. Java基础与实践题库_Java程序设计基础与实践(题库版)
  4. 通过帧中继验证OSPF支持的不同网络类型
  5. eureka源码:开启eureka server
  6. History(历史)命令用法 15 例
  7. STL泛型编程之迭代器
  8. 洛谷 P1019 单词接龙
  9. [渝粤教育] 盐城工学院 无机及分析化学C 参考 资料
  10. 用筛选法求100之内的素数
  11. 《精通自动化测试框架设计》—第2章 2.6节使用数据库
  12. limesurvey php5.2,Limesurvey二次开发(接入CAS统一身份认证)随笔
  13. 关于C语言中fseek函数的使用
  14. python爬取酷狗音乐top500_爬取酷狗音乐Top500
  15. 再添近10个新冠知识图谱,OpenKG发布第二批开放数据集
  16. 用计算机将复数转换成角度,计算机复数计算
  17. Linux-文件打开数配置实践
  18. C#面向对象编程的学习笔记
  19. android手机应用程序开发,Android手机应用程序开发标准
  20. Visa for a coder

热门文章

  1. python(3): str list dict tuple set 常用函数整理
  2. Golang并发操作入门
  3. 苹果手机壳_化至繁归至简,苹果11 Pro手机壳尽显非凡品位
  4. 微信VS支付宝服务窗 互联网大佬的O2O争夺战
  5. 支付宝服务窗关注 html,支付宝服务窗/生活号/小程序二次开发
  6. Linux入门之路(—):操作系统
  7. SignalR 实时通讯
  8. 数据仓库 桥接表_数据仓库经验总结
  9. 小说爬虫强制绕过ssl验证
  10. Element UI 自定义日历