蛇形填数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2
5 4 3
-
思路:
-
1、获取循环总次数n*n次,定义二位数组
-
2、分别循环下左上右,每次循环先给该位置赋值,在判断该方向的下一位置是否超出数组范围,若超出则改变方向循环。
-
*******注意:每次循环到拐角改变方向时,需要先将改变的的那个方向的位置前进一格,否则,改变方向的第一个值会覆盖拐角位置的值。
-
import java.util.Scanner; public class _33_3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int m = scan.nextInt(); int x = 0; int y = m-1; boolean top = false; boolean right = false; boolean left = false; boolean bottum = true; int num; int[][] data = new int[m][m]; for(int i = 1; i <= m*m; ++i){ if(bottum){ data[x][y] = i; num = x + 1; if(num >= m || data[num][y] != 0){ bottum = false; left = true; if(i != 1){ --y; } }else{ ++x; } }else if(left){ data[x][y] = i; num = y - 1; if(num < 0 || data[x][num] != 0){ left = false; top = true; if(i != 1){ --x; } }else{ --y; } }else if(top){ data[x][y] = i; num = x - 1; if(num < 0 || data[num][y] != 0){ top = false; right = true; if(i != 1){ ++y; } }else{ --x; } }else if(right){ data[x][y] = i; num = y + 1; if(data[x][num] != 0){ right = false; bottum = true; if(i != 1){ ++x; } }else{ ++y; } } } for(int i = 0; i < m; ++i){ for(int j = 0; j < m; ++j){ if(j == m - 1){ System.out.println(data[i][j]); }else{ System.out.print(data[i][j] + " "); } } } } }