一维的情况,你给的条件不对,我在程序里标注了,你想好后在相应的地方改了就行了。
程序代码:
#include <stdio.h> int array[22]= {0}; //点号状态 int sum[22]= {0}; //点号周围八个点状态 int num=0; void array_around_left(int x,int y); void array_around_right(int x,int y); void array_generation(int x); //进行下一代 void array_printf(void); int main() { int i,k; while(1) { scanf("%d",&i); if(i==-1) break; else array[i]=1; } scanf("%d",&num); array_printf(); for(k=0; k<num; k++) { for(i=1; i<=20; i++) { sum[i]=0; array_around_left(i,i); //统计数据 array_around_right(i,i); //统计数据 printf("%d ",sum[i]); //调试打印,后期删除 } printf("\n"); //调试打印,后期删除 for(i=1; i<=20; i++) array_generation(i); //进行下一代 array_printf(); } return 0; } void array_around_left(int x,int y) { if(array[x-1]) { sum[y]++; array_around_left(x-1,y); } } void array_around_right(int x,int y) { if(array[x+1]) { sum[y]++; array_around_right(x+1,y); } } void array_generation(int x) { if(array[x]) { if(sum[x]==2||sum[x]==4) //活着的邻居数 array[x]=1; else array[x]=0; } else { if(sum[x]==3||sum[x]==3) //死的邻居数 array[x]=1; else array[x]=0; } } void array_printf() //打印 { int i; for(i=1; i<=20; i++) { if(array[i]) printf("*"); else printf("-"); } printf("\n\n"); }
一沙一世界,一花一天堂。无限掌中置,刹那成永恒。