• 奇数幻方


    给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

    奇数幻方口诀:

    • 1放置在第一行的中间。
    • 顺序将2,3,dots等数放在右上方格中。
    • 当右上方格出界的时候,则由另一边进入。(把第最后一行当作第一行的上方,把最左边的一列当作最右边的右边)
    • 当右上方格中已经填有数,则把数填入正下方的方格中。
    • 按照以上步骤直到填写完所有N^2个方格。

    如输入3得到结果

    8    1    6    
    3    5    7    
    4    9    2    

    代码为:

    package huanHuang;
    
    public class HF {
        public static int[][] square(int n){
            int[][] martix=new int[n][n];
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    martix[i][j]=0;
            int i=0;
            int j=n/2;
            martix[i][j]=1;
            for(int k=2;k<=n*n;k++){
                if(i>=1 && j<n-1){//非第一行且右边不越界
                    if(martix[i-1][j+1]==0){//若数字的右上方未填充数字,这把右上方写入K;
                        i--;
                        j++;
                    }
                    else{//否则在数子的下方写入K;
                        i++;
                    }    
                }
                else if(i==0 && j<n-1){//第一行右边不越界
                    if(martix[n-1][j+1]==0){
                        i=n-1;
                        j++;
                    }
                    else{
                        i++;
                    }
                }
                else if(i>=1 && j==n-1){//非第一行右边越界
                    if(martix[i-1][0]==0){
                        i--;
                        j=0;
                    }
                    else{
                        i++;
                    }
                }
                else{//第一行且右边越界
                    if(martix[0][n-1]==0)
                    {
                        i=0;
                        j=n-1;
                    }
                    else{
                        i++;
                    }
                    
                }
                martix[i][j]=k;
                
            }
            return martix;
        }
        public static void main(String[] args) {
            int n=3;
            int[][] m=HF.square(n);
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    System.out.print(m[i][j]+"	");
                }
                System.out.println();
            }
    
        }
    
    }

      

  • 相关阅读:
    #Quiz(ra992_110510) Jun
    About Invertible Matrices Jun
    RadonNikodym定理“推广”(Ex 2.12.2) Jun
    Basic Notes for Matrices Jun
    恋爱侧面观 Jun
    ViewHolder的改进写法
    Android高手速成第二部分 工具库
    网页下拉列表实现多选
    Android高手速成第四部分 开发工具及测试工具
    Android高手速成第三部分 优秀项目
  • 原文地址:https://www.cnblogs.com/enjoy-life-clh/p/4800410.html
Copyright © 2020-2023  润新知