ccf2016年4月10日认证考试 俄罗斯方块问题思路

今天看了ccf认证考试试题,遇到一个俄罗斯方块的问题,感觉蛮有意思的和大家分享一下。
题目大概是这样的:
给定一个如下类型的输入,其中开始的15*10矩阵为原本的俄罗斯方块空间,1表示有方块,0表示无方块,接下来的4*4矩阵为将要落下的一个方块,并且其中的方块只能是4连通的。最后一行表示要落下的方块矩阵最左边为方块空间的第几行。


    //15*10方块空间0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 1 0 00 0 1 0 1 0 0 0 1 00 0 0 0 1 1 0 0 1 0//4*4下落方块0 0 0 01 1 0 01 1 0 00 0 0 0//行距6

要求输出的是方块落下时的样子,不要求做消除,如下所示:


    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 //可以看到下落0 0 1 0 1 1 1 0 1 0 //的方块。0 0 0 0 1 1 0 0 1 0

我的想法是这样的,我们是否可以模拟俄罗斯方块一步步往下沉得动作,最后即可获得最终落下的位置。那怎么模拟这个动作呢?我们先从我们要下落的方块矩阵看起:


            0 0 0 01 1 0 01 1 0 00 0 0 0

首先需要获得这个方块每个点在4*4矩阵中的位置:

        //遍历for(int i = 0; i < 4; i++){for(int j = 0;j < 4; j++){if(input[i][j] == 1){x[z] = i;y[z] = j + colunm;z++;}}}

其中,input数组为输入的4*4矩阵,colunm为输入的最后一个参数的自减。
之后,处理掉4*4矩阵开始的几个全为0的行:

        int t = x[1];//初始化for(int i = 0; i < 4; i++){x[i] = x[i] - t;}

然后,我们就可以开始模拟方块的下沉了:

        //下沉while(flag == true){for(int i = 0; i < 4; i++){if(data[x[i] + offset][y[i]] == 0){count++;}}if(count == 4){offset++;count = 0;}else{for(int i = 0; i < 4; i++){data[x[i] + offset - 1][y[i]] = 1;}flag = false;}}

其中,data数组表示方块空间;flag用来判断是否跳出while循环,开始声明为true;count用来判断是否此时所在的4*4矩阵是否可以满足条件,等于4时方块才可以继续往下移动一行,否则说明方块不能往下沉了,此时填充当前所在的空间,即为我们需要得到的结果。

ccf2016年4月10日认证考试 俄罗斯方块问题思路相关推荐

  1. 张家界市4月份计算机职称,2017年4月张家界计算机应用能力考试报名时间4月10日起...

    [摘要]环球网校提醒大家2017年4月张家界计算机应用能力考试报名时间4月10日起以下介绍了职称计算机考试时间.考试注意事项,希望对大家备考职称计算机考试有帮助,更多资料敬请关注环球职称计算机考试频道 ...

  2. 湖北省计算机二级报名时间2020年12,2020年3月湖北省计算机等级考试报名_时间:12月10日-12月23日...

    湖北省 计算机等级 导语:2020年3月全国计算机等级考试将于3月28日-30日举行,小编整理了湖北省报名时间,供大家参考,欢迎大家点击查看!更多计算机考试动态|模拟试题|历年真题请关注计算机学习网! ...

  3. 广东2021高考成绩查询6,2021全国高考6月10日全部结束 预计最快6月23日可查高考成绩...

    天气网讯,今天(10日)是部分地区高考最后一天,不少考生和家长都关心高考成绩的查询时间.据了解,安徽.江西.四川.广西.内蒙古预计最快6月23日可查高考成绩,小编在这也祝愿所有考生都能考上心仪的大学校 ...

  4. 2020德勤面试开始了吗_2020下半年教师资格证面试时间已出!12月10日开始报名

    安徽省2020年下半年中小学教师资格考试面试详情 一.面试时间安排 (一)报名:2020年12月10日8:00-13日17:00: (二)审核:2020年12月10日8:00-14日17:00: (三 ...

  5. 12月北京CISA认证考试考前辅导会成功举办

    12月北京CISA认证考试考前辅导会成功举办 2012年12月1日上午,由上海汇哲信息科技有限公司与国际信息安全学习联盟联合举办的CISA考前辅导(北京场)在北京海淀区中关村数码大厦顺利举办.这是国盟 ...

  6. 易生信群体和单细胞转录组专题第6期于5月10日在北京开课了

    群体转录组是我们最常接触到的一种高通量测序数据类型,其实验方法成熟,花费较低,分析思路简洁清晰,是入门生信,解决最常见问题的首选. 单细胞分析是近几年的明星技术,多次被Nature.Science评为 ...

  7. 截止9月10日苹果审核指南中文版

    苹果在9月3日对App Store审核指南进行了重大更新,新加入了扩展.HealthKit.HomeKit以及TestFlight相关内容.另外,在9月10日新品公布会之后,苹果再次更新了App St ...

  8. 互联网晚报 | 9月10日 星期五 | 美团启动数字人民币低碳出行试点;vivo X70系列正式发布;旷视科技科创板IPO过会...

    今日看点 ✦ 腾讯:"共同富裕专项计划"500亿元资金首期开始落地 ✦ TCL启动全球生态合作发展战略,在三大领域投入200亿 ✦ vivo X70系列发布:搭载自研影像芯片V1, ...

  9. 10月10日科技资讯 |罗永浩向老同事道歉;三星漏洞已波及四千万用户;Clojure 1.11 即将发布 | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 胡 ...

最新文章

  1. linux下yum包更新不了
  2. anaconda应答文件
  3. 数据结构——HDU1312:Red and Black(DFS)
  4. nodejs的调试debug
  5. JS 内置对象 String对象
  6. 中小企业CRM评测-八百客
  7. Ubuntu SSH Algorithm negotiation failed
  8. jettytomcat对待表单过长问题
  9. CSU 1573 最多的数字
  10. scanf可以输入负数吗_C语言进行数据的多输入多输出
  11. Parhaps you are running on a JRE rather than a JDK?
  12. 如何设置任务栏和开始菜单属性中的 分组相似任务栏按钮 的个数
  13. 第一次作业 四班05
  14. 11月13日云栖精选夜读:阿里云中间件产品科技普惠企业,满足多场景需求
  15. softmax的简洁实现
  16. python房价预测_Python实战:使用线性回归预测房价
  17. excel小技巧 生成递增时间区间
  18. 网友心中的高分电影合集,大家一起来拯救剧荒!欢迎补充!!!
  19. internet时间同步服务器地址(中国国家授时中心)
  20. 微信Windows版无法备份聊天记录

热门文章

  1. MySQL中实现rank排名查询以及在Mybatis中使用 mysql 的自定义变量 @的问题解决
  2. android控制板
  3. 第8章 对象引用、可变性和垃圾回收
  4. YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
  5. Postman工具的简单介绍
  6. 下拉框反选的几种方式
  7. c语言高斯误差函数,erfc - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  8. 如果重新学习计算机,你的学习路线是什么?
  9. linux编译运行uart,Kindle4: 编译并运行upstream linux kernel – v4.4
  10. 毕达哥拉斯素数的王伟猜想