题目内容:

这是细胞自动机的非图形版本。细胞自动机是指在一个二维网格内,每一个网格是一个细胞。每个细胞有活和死两种状态。

初始时刻,有些细胞是活的,有些细胞是死的。自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活。具体的规则如下:

  • 如果该细胞现在是活的,并且周围8个格子中有2或3个活着的细胞,则继续存活;如果周围8个格子中的活着的细胞数量少于2个或多于3个,则死亡;

  • 如果该细胞现在是死的,并且周围8个格子中正好有3个活着的细胞,则细胞复活。

  • 位于整个网格边缘和顶角的细胞,它的周围细胞可能少于8个。即越过网格的边界不再有细胞。

  • 每个细胞的生死变化,都不会影响当前这一步周围的细胞,只会在下一步表现出来。

提示:课程中的代码与上一句描述不同。

输入格式:

首先输入两个正整数,范围为[3,102],依次表示网格的宽度和高度。

然后输入多组正整数,依次表示一个活着的细胞的网格位置,每组数字中,第一个表示行号,第二个表示列号,均从0开始编号。

最后,以“-1 -1”表示不再有活着的细胞。-1 -1不是有效的位置。

然后,以一个正整数,范围为[1,10000],表示要求细胞自动机执行的步数。

输出格式:

输出一个正整数,表示执行完毕后,剩下的活着的细胞的数量。

输入样例:

3 3

1 1 1 2 0 1 2 1

-1 -1

1

输出样例:

7

时间限制:500ms内存限制:32000kb
代码:
package 面向对象程序设计_Java语言_翁恺;import java.util.Scanner;public class The_final_exam
{private int times;private int width;private int height;int old_field[][];int new_field[][];Scanner in = new Scanner(System.in);void Init(){width = in.nextInt();height = in.nextInt();old_field = new int[height+2][width+2];new_field = new int[height+2][width+2];// 初始化为0for (int i = 0; i < height+2; i++)for (int j = 0; j < width+2; j++){old_field[i][j] = 0;old_field[i][j] = 0;}//读入活的细胞的位置while(true){int i=in.nextInt();int j=in.nextInt();if(i==-1&&j==-1)break;old_field[i+1][j+1]=1;new_field[i+1][j+1]=1;}//读入执行步数times = in.nextInt();}void run(){for(int k=0;k<times;k++){for(int i=1;i<height+1;i++){for(int j=1;j<width+1;j++){int count=getNeighbor(i, j);if(old_field[i][j]==0){if(count==3)//细胞复活new_field[i][j]=1;}else{if(!(count==2||count==3))//细胞死亡new_field[i][j]=0;}}}//copyfor (int i = 1; i < height+1; i++){for (int j = 0; j < width+1; j++){old_field[i][j] = new_field[i][j];}}}}int getNeighbor(int i,int j){//计算位置为i,j的细胞周围活的细胞的数量int temp=0;temp+=old_field[i-1][j]+old_field[i+1][j]+old_field[i][j-1]+old_field[i][j+1];temp+=old_field[i-1][j-1]+old_field[i-1][j+1]+old_field[i+1][j-1]+old_field[i+1][j+1];return temp;}int Count(){//计算活着的细胞的数量int count=0;for (int i = 1; i < height+1; i++){for (int j = 1; j < width+1; j++){if(old_field[i][j]==1)count++;}}return count;}void Test(){Init();run();System.out.println(Count());}public static void main(String[] args){// TODO Auto-generated method stubnew The_final_exam().Test();}}

思路:

简单模拟题....
用两个二维数组来存细胞,细胞自动机每执行一次,遍历数组1一次,对数组1中每个细胞的状态进行判断,计算周围活着的细胞的数量,然后对数组2进行相应的操作,所有操作完成后将数组2拷贝至数组1。
这里判断细胞周围活着的细胞数量时有一个小技巧,不需要对每种边界情况进行处理,可以将数组开大点,下标从1开始使用,相当于在所使用的有效数组空间外面绕了一圈,避免数组越界。

期末考试_细胞自动机相关推荐

  1. 大学计算机python期末考试_大学计算机程序设计(Python)_章节测验,期末考试,慕课答案查询公众号...

    大学计算机程序设计(Python)_章节测验,期末考试,慕课答案查询公众号 更多相关问题 [问答题,论述题] 在上课时,有些平时不受老师重视的学生有的爱讲话,有的爱做小动作,特别是坐在窗边的学生则爱把 ...

  2. 山科大离散数学期末考试_西安电子科技大学网络与继续教育学院 2019学年上学期 《离散数学》期末考试试题 (......

    学习中心/函授站_ 姓 名                               学 号 西安电子科技大学网络与继续教育学院 2019学年上学期 <离散数学>期末考试试题 (综合大作 ...

  3. web前端开发技术期末考试_智慧树来我校开展WEB前端开发微专业导学

    11月17日,在6号教学楼6102阶梯教室,智慧树工作人员带来了WEB前端开发微专业导学.根据前期长青联盟微专业的报名情况及学生学习情况,为进一步提高学生学习微专业的质量,学院联系了微专业教学平台的专 ...

  4. 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc

    数据库期末考试重庆科技学院A ★编号:重科院( )考字第( )号 重庆科技学院 考 试 试 卷 2013/2012学年第 2 学期 ( A 卷,共 页 ) 课程名称: 数据库原理及应用 适用专业/年级 ...

  5. 洛阳理工JAVA期末考试_洛阳理工学院2010/2011学年第一学期基础体育理论期末考试试题答案...

    洛阳理工学院2010/2011学年第一学期基础体育理论期末考试试题答案 洛阳理工学院2010/2011学年第一学期基础体育理论期末考试试题答案 一.填空题(每空1分 共20分) 1.以 ______ ...

  6. 复旦大学python期末考试_关于2019-2020学年第一学期开学有关事项的通知

    复旦教通字[2019]77号 各院系.各位教师.各位同学: 2019-2020学年第一学期将于2019年9月9日开学.为保证开学前后各项教学相关工作有序进行,现就2019-2020学年第一学期开学有关 ...

  7. 数据科学技术与应用【中国大学MOOC】:期末考试_答案

    数据科学技术与应用 期末考试 答案 题目来源:中国大学MOOC-东华大学-宋晖等-数据科学技术与应用 1 ( 100分 ) 根据不同的身体指标可以预测患心脏病的风险等级(Risk).heart-dis ...

  8. 山东财经大学python期末考试_关于做好2018-2019学年第一学期期末考试工作的通知...

    各学院(部): 根据学校教学安排,2018-2019学年第一学期期末考试从2018年12月24日开始,2019年1月13日结束,其中2019年1月7日至1月13日为集中考试时间.相关事项安排如下: 一 ...

  9. 山东大学软件学院2021-6 《区块链》期末考试_孔老师_fromLWT_区块链期末考试题目回忆

    前言 简单回忆记录2021学年春季学期的限选课区块链的期末考试题目,记忆可能有偏差,请谅解.相关内容为个人观点,不是正确答案- 个人观点:课程内容丰富(有请其他老师来拓展),孔老师与同学的课上互动很多 ...

  10. 复旦大学python期末考试_在复旦大学当学渣是怎样的?

    上海生源,研一在读,四年平均GPA2.85 占坑,考完量子化学就写 ------------------ 量化乙烷,成功避开我所有复习重点 讲讲自己从班上倒数十名到考研碾压分数线86分的故事 先得从高 ...

最新文章

  1. iOS走近商城APP(四 runloop应用 获取通讯录并处理)
  2. c++基础_特殊回文数
  3. jvm 常用调试工具和设置jvm GC方法和指令
  4. html省市区选择器代码,js实现一个省市区三级联动选择框代码分享
  5. NSURLProtocol概述
  6. python访问序列元素的编号用什么括起来_【填空题】序列元素的编号称为 ,它从 开始,访问序列元素时将它用 括起来。...
  7. Matlab二维曲线之plot函数
  8. python pandas series想赋予新的值_Python-pandas根据其他列的值创建新列/逐行应用多列的功能...
  9. 【数据库技术与应用】Part01——数据库系统概述
  10. React系列之生命周期
  11. 计算机开机最快,电脑开机速度,最快几秒?
  12. python爬虫抓取链家租房数据
  13. D-月之暗面(树形dp)
  14. JMeter递增加压
  15. S32DS封装静态库相关问题
  16. 华为Ascend:进一步做好产品差异化是后续重点
  17. C#实现侏儒排序算法
  18. 江苏工匠杯_unseping_wp
  19. MQTT.fx连接RabbitMQ-MQTT出现bad user name or password问题
  20. 组合最优化——线性规划基本定理

热门文章

  1. 海湾5000汉字编码app
  2. 传奇服务器怎么修改升级武器成功,传奇服务端中设置装备元素升级不会破碎教程...
  3. QQ空间自动点赞代码
  4. Linux系统终于可以安装正版的QQ了
  5. RV减速器静力学和动力学仿真分析
  6. windos不能在本地计算机启动服务器,WDS 服务器可能无法启动 - Windows Server | Microsoft Docs...
  7. cs用服务器运行,如何搭建自己的CS服务器(插件配置篇)
  8. 基于MATLAB的汽车出入库计时系统 _matlab课程设计
  9. oracle12c如何完全卸载_如何卸载oracle12c
  10. Javashop 7.0 前后端代码更新发布方法