翁恺java考试卷_翁恺JAVA进阶期末测试

编程题我自己 0 分,因为把输进来的宽度和高度搞反了!!!!!!!!!!!!!!!

他先输进来的是宽度!!!!不想说了,都是泪。

这是修改版的!!!!!

选择题

1 - 5       B C D D B

6 - 10     A D C B A

11 - 15   A A C D C

16 - 20   C C A B C

判断题

21 - 25    X  X  √  √  √

填空题

26     7ok

27     142356

28      z

29      false

30      c:\Testdir\Testpackage

编程题

1 细胞自动机(30分)

题目内容:

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

初始时刻,有些细胞是活的,有些细胞是死的。自动机的每一步,根据每个细胞周围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

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);

int y = in.nextInt();

int x = in.nextInt();

int i, j, times, count_alive = 0;

int [][] cells = new int[x][y]; // 初始状态

int [][] flag = new int[x][y]; // 更新状态

// 读入坐标

while((i = in.nextInt()) != -1) {

j = in.nextInt();

cells[i][j] = 1;

}

i = in.nextInt();

for(i = 0; i < x; i++) // cells 数组的深拷贝

for(j = 0; j < y; j++)

flag[i][j] = cells[i][j];

//读入循环次数

times = in.nextInt();

while(times-- > 0) {

for(i = 0; i < x; i++) {

for(j = 0; j < y; j++) {

int count = 0;

for(int m = i-1; m <= i+1; m++) {

for(int n = j-1; n <= j+1; n++) {

if((m == i && n == j) || m < 0 || m >= x || n < 0 || n >= y) continue; // 设置查找边界

if(cells[m][n] == 1)

count++;

}

}

if(count < 2 || count > 3) // 进行 flag 的更新

flag[i][j] = 0;

else if(count == 3 && cells[i][j] == 0)

flag[i][j] = 1;

}

}

for(int p = 0; p < x; p++) // 进行 cells 的更新

for(int q = 0; q < y; q++)

cells[p][q] = flag[p][q];

}

// 遍历 cells 进行细胞数的查询

for(i = 0; i < x; i++)

for(j = 0; j < y; j++)

if(cells[i][j] == 1)

count_alive++;

System.out.println(count_alive);

in.close();

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部