生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的上帝,随意设定某个方格细胞的死活,以观察对世界的影响。
以上内容来自百度。某公司线上笔试出了这么一个编程题。模仿了有限的二维空间(x*y)的情况,输入当前时刻,得到下一时刻的状态。
代码很简单 ,运行通过了测试,当然我也不知道是否完全正确。只是记录一下,归于ACM吧 。望批评指正。
下面是我的代码():
1 #include <iostream> 2 3 4 using namespace std; 5 6 void Test(int x,int y); 7 char** imalloc(int x,int y); 8 void ifree(int x,char** Temp); 9 char **now = NULL; 10 char **next = NULL; 11 12 int main() 13 { 14 int x = 0; 15 int y = 0; 16 int i = 0; 17 18 19 while(cin>>x>>y) 20 { 21 //申请内存 22 now = imalloc(x+2,y+3); //申请(x+1)*(y+1) 外加每行后面的“\0” 23 next= imalloc(x,y+1); 24 25 //输入 26 for (i = 0;i<x;i++) 27 { 28 cin>>*(now+i+1)+1; 29 30 } 31 Test(x,y); 32 33 //输出 34 cout<<x<<" "<<y<<endl; 35 for (i = 0;i<x;i++) 36 { 37 cout<<*(next+i)<<endl; 38 } 39 40 //释放内存 41 ifree(x+2,now); 42 ifree(x,next); 43 44 } 45 46 return 0; 47 } 48 char** imalloc(int x,int y) 49 { 50 int i = 0; 51 52 char** Temp = new char*[x]; 53 for (i=0;i<x;i++) 54 { 55 *(Temp+i) = new char[y]; 56 memset(*(Temp+i),0,y); 57 58 } 59 return Temp; 60 61 62 } 63 void ifree(int x,char** Temp) 64 { 65 int i =0; 66 for (i=0;i<x;i++) 67 { 68 delete *(Temp+i); 69 } 70 delete Temp; 71 72 } 73 void Test(int x,int y) 74 { 75 76 int i = 0; 77 int j = 0; 78 for (i=0;i<x;i++) 79 { 80 81 for (j=0;j<y;j++) 82 { 83 int iCount = 0; 84 //判断邻居的情况呀 85 //左上 86 if (now[i][j]==‘*‘) 87 { 88 iCount++; 89 } 90 //上 91 if (now[i][j+1]==‘*‘) 92 { 93 iCount++; 94 } 95 //右上 96 if (now[i][j+2]==‘*‘) 97 { 98 iCount++; 99 } 100 //左 101 if (now[i+1][j]==‘*‘) 102 { 103 iCount++; 104 } 105 //右 106 if (now[i+1][j+2]==‘*‘) 107 { 108 iCount++; 109 } 110 //左下 111 if (now[i+2][j]==‘*‘) 112 { 113 iCount++; 114 } 115 //下 116 if (now[i+2][j+1]==‘*‘) 117 { 118 iCount++; 119 } 120 //右上 121 if (now[i+2][j+2]==‘*‘) 122 { 123 iCount++; 124 } 125 126 //判断当前位置的下一刻 127 if (now[i+1][j+1]==‘*‘) //当前活着 128 { 129 if (iCount<2||iCount>3) 130 { 131 next[i][j] = ‘.‘; 132 } 133 else if (iCount==2||iCount==3) 134 { 135 next[i][j] = ‘*‘; 136 } 137 138 } 139 else if (now[i+1][j+1]==‘.‘)//当前死亡 140 { 141 142 if (iCount==3) 143 { 144 next[i][j] = ‘*‘; 145 } 146 else 147 { 148 next[i][j] = ‘.‘; 149 } 150 } 151 152 } 153 } 154 }
时间: 2024-10-13 20:50:52