Posted on 2010-10-18 15:57
李東亮 閱讀(2154)
評(píng)論(0) 編輯 收藏 引用
ZOJ 1051 A New Growth
Industry
這道題嚴(yán)格來(lái)說(shuō)屬于一道簡(jiǎn)單的模擬題,但是題目描述的太繁瑣了,影響了理解。而一旦看懂題意后就好辦了。
這道題的大意就是說(shuō)在一個(gè)20X20的方格中養(yǎng)一種細(xì)菌,這種細(xì)菌的DNA被改造了,周?chē)芏却髸r(shí),繁殖減慢,密度減少,反之密度增加,且數(shù)量變動(dòng)大小由DNA序列決定,然后根據(jù)輸入進(jìn)行模擬,輸入n天后的情況。
題就這么簡(jiǎn)單,但是需要注意的是不能計(jì)算完一個(gè)方格的變化量之后立刻改變?cè)摲礁竦闹?,因?yàn)橹車(chē)姆礁?/span>k值還需要引用當(dāng)前的密度值。唯一可以使用的技巧就是把數(shù)組開(kāi)大點(diǎn),題目是20X20,可以開(kāi)到22X22,只使用下標(biāo)1-20來(lái)表示題目中的方格,這樣在計(jì)算時(shí)就不用判斷是否越界了,可以節(jié)省一些時(shí)間。
參考代碼如下:
#include <stdio.h>
#include <stdlib.h>
int a[22][22];
int d[16];
int b[20][20];
int main(void)
{
int t;
int n;
int i, j;
int k;
//freopen("in.txt", "r", stdin);
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (i = 0; i < 16; ++i)
{
scanf("%d", &d[i]);
}
for (i = 1; i < 21; ++i)
{
for (j = 1; j < 21; ++j)
{
scanf("%d", &a[i][j]);
}
}
while (n--)
{
for (i = 1; i < 21; ++i)
{
for (j = 1; j < 21; ++j)
{
k = a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1] +a[i][j];
b[i-1][j-1] = d[k];
}
}
for (i = 1; i < 21; ++i)
{
for (j = 1; j < 21; ++j)
{
a[i][j] += b[i-1][j-1];
if (a[i][j] < 0)
a[i][j] = 0;
else if (a[i][j] > 3)
a[i][j] = 3;
}
}
}
for (i = 1; i < 21; ++i)
{
for (j = 1; j < 21; ++j)
{
switch(a[i][j])
{
case 0:putchar('.');break;
case 1:putchar('!');break;
case 2:putchar('X');break;
case 3:putchar('#');break;
}
}
printf("\n");
}
if (t != 0)
printf("\n");
}
return 0;
}