一个nec的笔试题3*3的方格钟填入n(n>=10)内的某9个互不相关的整数,使得所有相邻的方格内的整数之和为质数
一个3*3的方格钟填入n(n>=10)内的某9个互不相关的整数,使得所有相邻的方格内的整数之和为质数;
我是如下写的,虽然算出来了,可是觉得有些别扭,有谁给指定一下?
package test;
public class tableTest
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method
// stub
// 表格数组
int[][] table = new int[3][3];
table[0][0] = 10;
table[0][1] = 10;
table[0][2] = 10;
table[1][0] = 10;
table[1][1] = 10;
table[1][2] = 10;
table[2][0] = 10;
table[2][1] = 10;
table[2][2] = 10;
int i = 0;
int j = 0;
int linKey = table[i][j];// 相邻单元
// 进入循环
for (i = 0; i < 3; i++)// 表格行
{
for (j = 0; j < 3; j++)// 表格列
{
System.out.println("*****************计算单元格:" + i + "行" + j
+ "列");
int key = table[i][j];
// 进入循环看那些是相邻单元格
int m = 0;
int n = 0;
for (; m < 3; m++)// 表格行
{
for (; n < 3; n++)// 表格列
{
boolean hasPrime = false;
boolean test = (((m - i) | (n - j)) == 1)
& (((m - i) & (n - j)) == 0);
// 是否相邻算法
if ((((m - i) | (n - j)) == 1)
& (((m - i) & (n - j)) == 0))
{
while (linKey < 1024)
{
if (isPrime(key + linKey))// 如果取到相加为质数的数,退出循环
{
table[m][n] = linKey;
hasPrime = true;
linKey++;
break;
}
linKey++;
}
System.out
.println("**********************************************************");
System.out.println(table[0][0] + "|" + table[0][1]
+ "|" + table[0][2] + "|");
System.out.println(table[1][0] + "|" + table[1][1]
+ "|" + table[1][2] + "|");
System.out.println(table[2][0] + "|" + table[2][1]
+ "|" + table[2][2] + "|");
}
}
n = 0;// 设置成从0列开始
}
}
}
System.out
.println("**********************最终结果************************************");
System.out.println(table[0][0] + "|" + table[0][1] + "|" + table[0][2]
+ "|");
System.out.println(table[1][0] + "|" + table[1][1] + "|" + table[1][2]
+ "|");
System.out.println(table[2][0] + "|" + table[2][1] + "|" + table[2][2]
+ "|");
}
private static boolean isPrime(int i)
{
// TODO Auto-generated method
// stub
boolean isPrimeNumber = true;
for (int p = 2; p < i; p++)
{
if ((i % p) == 0)
{
isPrimeNumber = false;
}
}
return isPrimeNumber;
}
}