三行三列,第1行第2列固定为1,其它为2-9的数,求横,竖,交叉相加都等于15,输出矩阵??
(用数组做)
求有人有路子或是做过类似的算法题的给点指点?

解决方案 »

  1.   

    我以前学c语言时,有这个算法,当n为奇数时,算法很简单,n = 偶数时,没做过.(n为几行几列)
    可以找一下,如果确实很急,我去找一下以前的代码,(手头没有)
      

  2.   

    ==========================
    奇数阶魔方阵求法
    ==========================(1) 将1放在第一行中间一列;
    (2) 从2开始直到n×n止各数依次按下列规则存放:
        每一个数存放的行比前一个数的行数减1,列数加1
    (3) 如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如1在第1行,则2应放在最下一行,
        列数同样加1;
    (4) 当上一个数的列数为n时,下一个数的列数应为1,行数减1。例如2在第3行最后一列,则3应放在第2行第1列;
    (5) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
        例如按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第
        3列(即最后一列),故7放在6下面。按此方法可以得到任何阶的魔方阵。
    */import java.io.*;public class MagicMatrix {
        public static void main(String[] args){
            // 输入阶数
            int n = 0;
            
            // 获取控制台输入
            BufferedReader input = new BufferedReader(
                new InputStreamReader(System.in));
            
            while(n<3 || (n&1)==0) {
                try {
                    // 获取阶数。
                    System.out.println("请输入一个大于3的奇数!");
                    n = Integer.parseInt(input.readLine());
                }
                catch (NumberFormatException e) {
                    // 格式错误,重输
                    System.out.println("请输入一个大于3的奇数!");
                    continue;
                }
                catch (IOException e) {
                    System.out.println("程序发生异常错误将被关闭!");
                    e.printStackTrace();
                }
            }
            
            int a[][] = new int[n][n];
            int i=0;
            int j=n>>1; // 初始化第一个位置为第一行中位置
            a[i][j] = 1;
            
            // 按向右上的斜线填充
            for( int k=2; k <= n*n; ++k )
            {
                i = (i + n - 1) % n;    // 循环上移一行
                j = (j + 1) % n;        // 循环右移一列
                
                if( a[i][j] != 0 )     // 该位置已有数值,到上一数的下一行
                {
                    i = (i + 2) % n;        // 下移二行
                    j = (j + n -1 ) % n;    // 左移一列
                }
                
                a[i][j] = k;
            }
            
            
            for(i = 0; i < n; ++i) {
                for(j = 0; j < n; ++j) {
                    System.out.print(a[i][j] + "\t");
                }
                System.out.println();
            }
        }
    }