java編程-九宮格問題

要求:根據輸入的數字n,如:3,5,7...以矩陣顯示n行n列數,這些數由1~n*n構成,要求矩陣的每行每列及對角線上n個數之和相等
預備知識:
在距陣中,1在第一行正中,隨後的數字應放到上一個數字的右上方方格中,如果向上不行,就放到該列的最下方格子;如果向右不行,就放到該行的最左邊;如果都不行,就放到上一個數字的正下方;如果目標格子中已經有數字,也放到上一個數字的正下方

思路:
1) 使用2維數組預備存儲1~n*n這些數字
2) 1是放到第一行正中的,所以其索引號是:[0][(n-1)/2]
3) 隨後的數字,其索引號原則如下
1> num的行索引爲 num-1 的 (行索引-1) , num的列索引爲 num-1 的 (列索引+1)
2>如果發現num的行,列索引都越位(-1或n),則
num的行索引爲 num-1 的 (行索引+1) , num的列索引爲 num-1 的 (列索引)
3>如果發現num的行,列索引指向的位置已經有數字,則
num的行索引爲 num-1 的 (行索引+1) , num的列索引爲 num-1 的 (列索引)
4>如果發現num的行越位(-1),則
num的行索引爲n-1
5>如果發現num的列越位(n),則
num的列索引爲0

 

如下是改程序的實現:

 

 

import java.util.Scanner;

public class Glorin{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
System.out.print("請輸入一個爲正奇數的階數:");
int x = s.nextInt(); //輸入長度
int h = 0; //行
//在距陣中,1在第一行正中
int l = x / 2; //列
int[][] a = new int[x][x];
for (int i = 1; i <= x * x; i++)
{
a[h][l] = i; //運行提示溢出
//隨後的數字應放到上一個數字的右上方方格中
h--;
l++;
//3.如果都不行,就放到上一個數字的正下方
if (h < 0 && l >= x)
{
//先返回上一個數字
h++;
l--;
//再下移一行
h++;
}
//1.如果向上不行,就放到該列的最下方格子
else if (h < 0)
{
h = x - 1;
}
//2.如果向右不行,就放到該行的最左邊
else if (l >= x)
{
l = 0;
}
//4.如果目標格子中已經有數字,也放到上一個數字的正下方
else if (a[h][l] > 0)
{
//先返回上一個數字
h++;
l--;
//再下移一行
h++;
}
}

//打印九宮格
for (int j = 0; j < x; j++)
{
for (int k = 0; k < x; k++)
{
System.out.print(a[j][k] + " ");
}
//換行
System.out.println();
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章