您的位置:首页 > 其它

ZOJ-1051

2013-12-13 15:45 483 查看
import java.util.Scanner;

public class Main
{

public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);

int count = sc.nextInt();

for (int l = 0; l < count; l++)
{
int day = sc.nextInt();
int[] dna = new int[16];
for (int k = 0; k < dna.length; k++)
{
dna[k] = sc.nextInt();
}

int[][] data = new int[20][20];
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
data[i][j] = sc.nextInt();
}
}

for (int d = 0; d < day; d++)
{
int matrix[][] = caculateDNA(data, dna);
change(data, matrix);
}

if (l > 0)
System.out.println();
print(data);
}
}

static void change(int[][] data, int[][] matrix)
{
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
int r = data[i][j] + matrix[i][j];
if (r < 0)
{
r = 0;
}
if (r > 3)
{
r = 3;
}
data[i][j] = r;
}
}
}

static int[][] caculateDNA(int[][] data, int[] dna)
{
int matrix[][] = new int[data.length][data[0].length];

for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
matrix[i][j] = dna[caculateK(data, i, j, data.length)];
}
}
return matrix;
}

static int caculateK(int[][] data, int i, int j, int length)
{
int result = data[i][j];
if (i - 1 >= 0)
{
result += data[i - 1][j];
}
if (i + 1 < length)
{
result += data[i + 1][j];
}
if (j - 1 >= 0)
{
result += data[i][j - 1];
}
if (j + 1 < length)
{
result += data[i][j + 1];
}
return result;
}

static void print(int[][] data)
{
String[] ss = new String[]
{ ".", "!", "X", "#" };

for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[i].length; j++)
{
System.out.print(ss[data[i][j]]);
}
System.out.println();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: