奇数九宫格的自动填充

1 需求介绍

作业题目:奇数九宫格的自动填充

作业目的:测试判断语句与循环语句的使用

2 技术描述

  1. 第一行(数组第0行)的正中间放入1。
  2. 下一个数总是放在放好的这个数的右上角45°,考虑有以下两种情况:

行越界:把这个数放到同列的最后一行。

列越界:把这个数放到同行的首列。

  1. 如果遇到n的整数倍数,则放到上个数的正下方,也有两种情况:

行列同时越界。

冲突(位置上已经有了数字)

4.定义二维数组时默认全为0,判断位置上若不为0,则产生冲突。

3 主要功能代码

import java.util.*;

public class Cc {

        public static void show(int[][] b,int n)

        {

            for(int i=0;i<n;i++)

            {

               for(int j=0;j<n;j++)

               {

                    System.out.print(b[i][j]+"\t");

               }

               System.out.print("\n");

            }

         }

       

        public static void fill(int[][] a,int n, int y, int x)

        {

           for(int i=1;i<=n*n;i++)

            {

                  a[y][x] = i;

                  y--;

                  x++;

               if(y<0&&x<n)

               {

                     y = n-1;

               }

               if(y>=0&&x==n)

               {

                  x = 0;

               }

                if((y<0&&x==n)||a[y][x]!=0)

               {

                  y=y+2;

                  x--;

               }

            }

        }

       

        public static void main(String[] args)

        {

           System.out.println("输入一个数字(打印九宫格N*N格)");

           Scanner in = new Scanner(System.in);

           int n = in.nextInt();

           System.out.println("打印"+n+"*"+n+"的九宫格");

           if(n%2==0)

           {

              System.out.println("Error");

           }

           int[][] a = new int[n][n];

           int y = 0;

           int x = n/2;

           fill(a,n,y,x);

           show(a,n);

        }

}

 

4成果展示

 

 

 

这里自动填充九宫格并不包含所有方案的结果,

如果要全部找出,可以考虑dfs暴力搜索,剪枝法优化算法。

猜你喜欢

转载自blog.csdn.net/h471507602/article/details/82944179
今日推荐