奇數九宮格的自動填充
1 需求介紹
作業題目:奇數九宮格的自動填充
作業目的:測試判斷語句與迴圈語句的使用
2 技術描述
- 第一行(陣列第0行)的正中間放入1。
- 下一個數總是放在放好的這個數的右上角45°,考慮有以下兩種情況:
行越界:把這個數放到同列的最後一行。
列越界:把這個數放到同行的首列。
- 如果遇到n的整數倍數,則放到上個數的正下方,也有兩種情況:
行列同時越界。
衝突(位置上已經有了數字)
4.定義二維陣列時預設全為0,判斷位置上若不為0,則產生衝突。
3 主要功能程式碼
import java.util.*;
public class
public static void show(int[][] b,int n)
{
for(int i=0;i<n;i++)
{
for
{
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暴力搜尋,剪枝法優化演算法。