蛇形填数
来源:互联网 发布:淘宝女装代理排除同款 编辑:程序博客网 时间:2024/06/05 09:27
题目描述
在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
在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
复杂方法:
package MainTest;import java.util.*;public class Main { private static void snakeSquare(int n) { int[][] square = new int[n][n]; // true 代表递增, false代表递减 boolean flag = true; // ture代表垂直方向变化, false代表水平方向变化 boolean dir = true; // R,r是上下边界值;C,c是左右边界值 int R = n-1, C = n-1, r = 0, c = 0; for(int i = n-1, j = 0,counter = 0 ; counter < n*n;counter++){ square[j][i] = counter + 1; // 垂直往下 if(dir && flag) { j+=1; if(j == C) {dir = !dir;flag = !flag;} } //垂直向上 else if(dir && !flag) { j -= 1; if(j == c) {dir = !dir;flag = !flag;} } //水平向右 else if(!dir && flag) { i += 1; if(i == R-1) { dir = !dir; //水平向右结束后说明要进入下一个内环,要改变边界范围 C -= 1;R -= 1;r += 1;c += 1; } } //水平向左 else { i -= 1; if(i == r) dir = !dir; } } for(int i = 0 ; i < n; i++){ for(int j = 0; j < n;j++) System.out.print(square[i][j] + " "); System.out.println(); } } public static void main(String[] args) { Scanner in= new Scanner(System.in); while(in.hasNext()){ int k=in.nextInt(); snakeSquare(k);} }}改进简单方法:
package MainTest;import java.util.*;public class Main { public static void main(String[] args) { Scanner in= new Scanner(System.in); while(in.hasNext()){ int k=in.nextInt(); int[][] a=new int[k][k]; for (int i = 0; i <k; i++) {for (int j = 0; j <k; j++) {a[i][j]=0;}} int count=1; int x=0,y=k-1; a[x][y]=1; while(count<(k*k)){ while(x+1<k&&(a[x+1][y]==0)) a[++x][y]=++count; while(y-1>=0&&(a[x][y-1]==0)) a[x][--y]=++count; while(x-1>=0&&(a[x-1][y]==0)) a[--x][y]=++count; while(y+1<k&&(a[x][y+1]==0)) a[x][++y]=++count; } for (int i = 0; i <k; i++) {for (int j = 0; j <k; j++) {if(j==k-1){ System.out.print(a[i][j]); System.out.println();}elseSystem.out.print(a[i][j]+" ");} } } } }反思:主要是注意数组下标越界和把握变化规律
阅读全文
0 0
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- 面试题
- 设计一个不能被继承的类
- 腾讯前端求职训练营第四天
- 汇编格式
- 最大公约数
- 蛇形填数
- ZooKeeper学习第三期---Zookeeper命令操作
- [leetcode]543. Diameter of Binary Tree
- java.util.ConcurrentModificationException
- 30day-40day 新浪微博(项目实践)
- HTML frameset定义页面多窗口
- 1160: 矩阵的最大值(指针专题)
- nginx的实践手册
- Chrome 开发者工具使用指南