给定一个 n x n 的网格,其中每个单元的初始状态为 ALIVE 或 DEAD,模拟 k 个时刻后的网格状态,并输出。
输入
3 3
0 0 0
1 1 1
0 0 0

由于输入为数组所以我们将数字储存在数组中

遵循以下四条规则:

        
  •         人口过少:如果一个活细胞周围活细胞的个数小于 2,那么它在下一个时刻会死亡。     
  •     
  •         正常:如果一个活细胞周围有 2 或 3 个活细胞,那么它在下一个时刻仍然存活。     
  •     
  •         人口过多:如果一个活细胞周围有超过 3 个活细胞,那么它在下一个时刻会死亡。     
  •     
  •         繁殖:如果一个死细胞周围正好有 3 个活细胞,那么它在下一个时刻会复活
因为活细胞为1,则可以通过获取周围几个数的和来判断规则
在下两个代码中都用建立函数来判断每个细胞一个时刻后的状况
再通过k个时刻的循环来得出最后的数组
c代码如下
#include <stdio.h>
int n, k;
int list[1000][1000] ;
int list2[1000][1000];
int rule(int list[1000][1000], int x, int y) {           /*自建判断函数,并返回一个时刻后的细胞状况*/
	int now = list[x][y];
	int x_list[] = {x - 1, x, x + 1};
	int y_list[] = {y - 1, y, y + 1};
	int surrand = 0;
	int a, b;
	for (int i = 0; i <= 2; i++) {
		a = x_list[i];
		if (a < 0 || a > n - 1) {
			continue;
		}
		for (int i = 0; i <= 2; i++) {
			b = y_list[i];
			if ((a == x && b == y) || b<0&nbs***bsp;b>n - 1) {
				continue;
			}
			surrand = surrand + list[a][b];
		}
	}
	if (surrand < 2 && now == 1) {
		return 0 ;
	} else if ((surrand == 2 || surrand == 3)
	           && now == 1) {
		return 1 ;
	} else if (surrand > 3 && now == 1) {
		return 0 ;
	} else if (surrand == 3 && now == 0) {
		return 1 ;
	}
	return now;
}
int main() {                                             /*主函数*/
	int rule(int list[1000][1000], int x, int y);
	scanf("%d", &n);
	scanf("%d", &k);
	for (int i = 0; i < n; i++) {           /*获取数组*/
		for (int t = 0; t < n; t++) {
			scanf("%d", &list[i][t]);
		}
	}

	for (int i = 0; i < k; i++) {                       /*对每个细胞用函数进行规则判断*/
		for (int i = 0; i < n; i++) {
			for (int t = 0; t < n; t++) {
				list2[i][t] = rule(list, i, t);
			}
		}
		for (int i = 0; i < n; i++) {
			for (int t = 0; t < n; t++) {
				list[i][t] = list2[i][t];
			}
		}
	}
	for (int i = 0; i < n; i++) {                  /*输出*/
		for (int t = 0; t < n; t++) {
			printf("%d ", list[i][t]);
		}
		printf("\n");
	}
}

python3代码如下   但是python3效率低,当数据量较大时,会出现超时现象( 仅供参考)
from copy import deepcopy as dc
[n,k]=[int(i) for i in input().split()]
alll=[]
def rule(alll,x,y):
    now=int(alll[x][y])
    x_list=[x-1,x,x+1]
    y_list=[y-1,y,y+1]
    surrand=0
    for a in x_list:
        if a<0&nbs***bsp;a>n-1 :
            continue
        for b in y_list:
            if (a==x and b==y)or b<0&nbs***bsp;b>n-1:  
                continue
            surrand+=int(alll[a][b])
    if surrand<2 and now==1:
        return 0
    elif (surrand==2&nbs***bsp;surrand==3) and now==1:
        return 1
    elif surrand>3 and now==1:
        return 0
    elif surrand==3 and now==0:
        return 1
    return now

for i in range(n):
    alll.append(input().split())
list_0=[[0*i for i in range(n)] for i in range(n)]
for i in range(k):
    alll_=dc(list_0)   
    for a in range(n):
        for b in range(n):
            alll_[a][b]=int(rule(alll,a,b))
    alll=dc(alll_)
    
    
for i in alll:
    print(*i,sep=' ')