一个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;
    }
}

解决方案 »

  1.   

    我知道怎么解决了......我把解决的类帖子www.e-move.com.cn灌水区了。地址为
    http://www.e-move.com.cn/GetParticularServlet?func=DOUCHEBBS&ID=3
      

  2.   

    <a href="http://www.e-move.com.cn/GetParticularServlet?func=DOUCHEBBS&ID=3">此帖</a>
      

  3.   

    质数那块可以再简化一些
    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;
        }
    }
      

  4.   

    p < Math.sqrt(i),好主意!
      

  5.   

    还好数据还是比较少的,只要算Math.sqrt(i)次就可以了,但如果数据超过百万,你的程序就不能用了,记得有一个关于素数的算法.,不过具体的忘了,不知道又哪位高手能贴出来呢?