uva 457 Linear Cellular Automata
英语。。。。
题意:40个培养基,开始时只有20号为1,其他全部为0。
一个培养基会影响隔壁两个培养基。
假设1号左边无穷远处有一个培养基为0,40号右边无穷远处也有一个培养基为0。
给出一个DNA序列,元素均不大于3。
求50天培养基的变化。
每天某个培养基的变化是 x=a[j-1]+a[j]+a[j+1], DNA[x]。
每过一天培养基变化为DNA[x]。
用' '代表0,'.'代表1,'x'代表2,'W'代表3。
代码:
#include<stdio.h>
int main()
{
int DNA[10];
int dish[42];
int ncase;
scanf("%d", &ncase);
while(ncase--)
{
for(int i = 0; i < 10; i++)
{
scanf("%d", &DNA[i]);
}
for(int i = 0; i < 42; i++)
{
dish[i] = 0;
}
dish[20] = 1;
printf(" . \n");
for(int i = 1; i < 50; i++)
{
int previous = 0;
for(int j = 1; j <= 40; j++)
{
int temp = dish[j];
dish[j] = DNA[previous + dish[j] + dish[j + 1]];
previous = temp;
switch(dish[j])
{
case 0:
printf(" ");
break;
case 1:
printf(".");
break;
case 2:
printf("x");
break;
case 3:
printf("W");
break;
}
}
printf("\n");
}
if(ncase != 0)
printf("\n");
}
return 0;
}