UVa 457 - Linear Cellular Automata

来源:互联网 发布:阿里云1m带宽看 视频 编辑:程序博客网 时间:2024/05/04 12:27

题目大意(From Sina Blog:xiaohe):

个生物学家堆在一排并排着的培养皿中的细菌群体进行DNA序列修改来进行相关测试,通过改变DNA
他可以让细菌对邻近培养皿里的种群浓密度产生反应,群体密度用4个状态标示(0~3)DNA的状态通过
下标为0~9的数组描述,具体如下:
 .对于每个给出的培养皿,让其与左邻右邻的培养皿密度和为K,第二天,培养皿就会形成一个
对应数组序列DNA[K]的种群密度。
 .最左边的培养皿可以认为其左边有个密度为0的培养皿,最右边的右边也有一个。
现在我们清楚的知道一些DNA程式会导致所有的菌落死亡,(像[0,0,0,0,0,0,0,0,0,0])另外一些会令其
快速生长([3,3,3,3,3,3,3,3,3,3])生物学家对这些更小的媒介DNA程式是如何运作的很感兴趣。
写一个程序模仿40个并排着的细菌培养皿的生长状况,假设第20个起始密度为1,其他的为0
输入

先输入案例个数
然后输入密度变化规律

输出
密度为1输出' ',2输出'.',3输出'x',4输出'W'。

例如:
输入十个序列值存储在数组中
0 1 2 0 1 3 3 2 3 0
如果第n天第i个培养皿与其左边和右边的密度之和为(1+2+1=4),则第i+1天第i个培养皿的密度就是第五个
(以数组存储下表为4的元素)值3
本题之列出了十天的变化,程序要列出五十天的四十个培养皿的变化
============================================================================


这个题不难,但是对我来说还是有很多细节问题要注意:

1.粗心,开始时开的数组是int dna[10],jun[50][40],后来发现不够用开成45后,下面有两个for循环的循环条件要由40改为41,

  但是由于粗心忘了改了,后来发现问题后也改了,但是只改了第一个,导致输出时少最后一列。纠结了好一会儿。

2.题目的要求是在每个例子之间 输出空格,我以为是每个之后,导致一次WA的严重后果。切记切记!

===========================================================================

/*Author:GneveekData: 2011-10-1Source: UVa 457 - Linear Cellular Automata*/#include <stdio.h>#include <string.h>int dna[10],jun[50][45];int main(){//freopen("D:\\data.in","r",stdin);//freopen("D:\\data2.out","w",stdout);int n,i,j,temp;scanf("%d",&n);while(n--){for(i=0; i<10; i++)scanf("%d",&dna[i]);memset(jun,0,sizeof(jun));jun[0][20] = 1;for(i=1; i<50; i++){for(j=1; j<41; j++){temp = jun[i-1][j-1] + jun[i-1][j] + jun[i-1][j+1];jun[i][j] = dna[temp];}}for(i=0; i<50; i++){for(j=1; j<41; j++){switch (jun[i][j]){case 0:putchar(' ');break;case 1:putchar('.');break;case 2:putchar('x');break;case 3:putchar('W');break;}}putchar('\n');}if(n>0)putchar('\n');}return 0;}



原创粉丝点击