1. 程式人生 > >奇數九宮格的自動填充

奇數九宮格的自動填充

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暴力搜尋,剪枝法優化演算法。