一个nec的笔试题3*3的方格钟填入n(n>=10)内的某9个互不相关的整数,使得所有相邻的方格内的整数之和为质数

cowstar 2006-03-15 04:39:54
一个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;
}
}
...全文
340 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
deepass 2006-03-19
  • 打赏
  • 举报
回复
还好数据还是比较少的,只要算Math.sqrt(i)次就可以了,但如果数据超过百万,你的程序就不能用了,记得有一个关于素数的算法.,不过具体的忘了,不知道又哪位高手能贴出来呢?
gifted1982 2006-03-17
  • 打赏
  • 举报
回复
质数那块可以再简化一些
private static boolean isPrime(int i)
{
// TODO Auto-generated method
// stub
boolean isPrimeNumber = true;
for (int p = 2; p < Math.sqrt(i); p++)
{
if ((i % p) == 0)
{
isPrimeNumber = false;
}

}
return isPrimeNumber;
}
}
wddlqd 2006-03-17
  • 打赏
  • 举报
回复
这么快自己解决了。。。。。
cowstar 2006-03-17
  • 打赏
  • 举报
回复
<a href="http://www.e-move.com.cn/GetParticularServlet?func=DOUCHEBBS&ID=3">此帖</a>
cowstar 2006-03-17
  • 打赏
  • 举报
回复
我知道怎么解决了......我把解决的类帖子www.e-move.com.cn灌水区了。地址为
http://www.e-move.com.cn/GetParticularServlet?func=DOUCHEBBS&ID=3
cowstar 2006-03-17
  • 打赏
  • 举报
回复
p < Math.sqrt(i),好主意!
cowstar 2006-03-16
  • 打赏
  • 举报
回复
顶,谁给看看阿
gifted1982 2006-03-15
  • 打赏
  • 举报
回复
这个好,明天再看
cowstar 2006-03-15
  • 打赏
  • 举报
回复
结果也是个错的,在算某个相邻的时候,把已经算出结果的那个也改了,所以不对了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧