题目大意:
给定40个培养皿和10个DNS program(10个整数值),DNS program的值为0-3的整数值。
最开始第20个培养皿的密度为1,其他的培养皿的密度为0;第二天的培养皿i的密度计算方式为: k=DNS[i-1] + DNS[i] + DNS[i+1]; 则密度为DNS[k];
其中第一个和最后一个培养皿的最左和最右密度均为0;
输入:
case个数, 然后空行,每个case输入10个DNS program;每个case之间空行隔开;
输出:
输出50天40个培养皿的密度;其中0、1、2、3分别用' ' '.' 'x' 'W';
注意sample output中为了看的方便用b表示了空格,并且只输入了10行;
Sample Input
1
0 1 2 0 1 3 3 2 3 0
Sample Output
bbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbb.xbx.bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbb.bb.bb.bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb.........bbbbbbbbbbbbbbbb
bbbbbbbbbbbbbb.xbbbbbbbx.bbbbbbbbbbbbbbb
bbbbbbbbbbbbb.bbxbbbbbxbb.bbbbbbbbbbbbbb
bbbbbbbbbbbb...xxxbbbxxx...bbbbbbbbbbbbb
bbbbbbbbbbb.xb.WW.xbx.WW.bx.bbbbbbbbbbbb
bbbbbbbbbb.bbb.xxWb.bWxx.bbb.bbbbbbbbbbb
思路分析:
假设b[40] 表示从0到39号培养皿的密度;
因为要打印每一天的密度,用a[40]作为临时数组记录用于计算过程;
dns[10] 表示DNS program的数值;
a[i] = dns[ b[i-1] + b[i] + b[i+1]]
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[41],b[41];
void print();
int main()
{
int dna[10];
int t,i,k,j;
cin>>t;
while(t--)
{
for(i=0;i<10;i++)
cin>>dna[i];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[19]=1;
b[19]=1;
print();
for(k=1;k<50;k++)
{
a[0]=dna[b[0]+b[1]];
for(j=1;j<39;j++)
a[j]=dna[b[j]+b[j+1]+b[j-1]];
a[39]=dna[b[39]+b[38]];
memcpy(b,a,sizeof(a));
print();
}
if(t>0)
cout<<endl;
}
return 0;
}
void print()
{
int i;
for(i=0;i<40;i++)
switch(b[i])
{
case 0:putchar(' ');break;
case 1:putchar('.');break;
case 2:putchar('x');break;
case 3:putchar('W');break;
}
cout<<endl;
}