aiheshan

有多自律,才能有多自由

导航

UVa 457 - Linear Cellular Automata

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=398
 
题目大意:
给定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;
    
}
             

  

posted on 2018-04-15 20:14  aiheshan  阅读(434)  评论(0编辑  收藏  举报