Java完成順時針輸入螺旋二維數組的辦法示例。本站提示廣大學習愛好者:(Java完成順時針輸入螺旋二維數組的辦法示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成順時針輸入螺旋二維數組的辦法示例正文
最近看到一道有點意思的邏輯算法題,便著手完成一下。標題是要求打印 出N*N順時針螺旋數組,規律如下:
// 1 2 3 4 5 // 16 17 18 19 6 // 15 24 25 20 7 // 14 23 22 21 8 // 13 12 11 10 9
Java 完成示例代碼如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] rect = new int[n + 1][n + 1]; int x = 0, y = 1; // 以後遍歷的地位 int px = 1, py = 0; // x/y 在以後循環方向的增量 int pn = n; // 該方向上還需求多少個數字(會遞加,由於順時針往裡縮) int sum = n; // 以後遍歷方向的起點地位 /** 目的輸入順時針 */ // 1 2 3 4 5 // 16 17 18 19 6 // 15 24 25 20 7 // 14 23 22 21 8 // 13 12 11 10 9 /** 翻轉矩陣為逆時針(為了便於前面邏輯處置,輸入的時分再翻轉回去) */ // 1 16 15 14 13 // 2 17 24 23 12 // 3 18 25 22 11 // 4 19 20 21 10 // 5 6 7 8 9 for (int i = 1; i <= n * n; i++) { // 翻轉矩陣循環 // 移到下一個點(第一次方向1->5 x增量為1, y的增量為0, 第二次方向為6->9,x增量為0,y增量為1,pn增加一個) x += px; y += py; rect[x][y] = i; if (i == sum) { // 抵達該方向的最後一個點 if (px == 1 || px == -1) { // x的增量不為0,則為豎向 -> 橫向 pn = pn - 1; // 豎向變為橫向的時分,該方向上數字的個數會增加一個 sum = sum + pn; py = px; px = 0; } else { // x的增量為0, y的增量不為0,則為橫向 -> 豎向 sum = sum + pn; px = -py; py = 0; } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { System.out.print(rect[j][i] + "\t"); // 翻轉恢復輸入 } System.out.println(); } } }
輸入測試
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家學習或許運用java能帶來一定的協助,假如有疑問大家可以留言交流。