顺时针输入数组
如题:定义N*M的数组,按照顺时针将0~n*m-1输入到数组中。下面是我用Java写的实现:
思路:我使用二维数组做的,按照顺时针复制顺序,可以发现赋值分为四种方式(右,下,左,上),所以我建立了四个方法,
以向右函数为起始点,然后内部调用向下函数,依次内调,形成右->下->左->上->右的循环,利用数组初始化后的值是0作为结束的标志。
public class Test7 { static int flag = 0; static int n = 0; static int m = 0; public static void main(String args[]) { int k = 6; //我直接手动赋值了。 int b = 6; int[][] a = new int[k][b]; n = k; m = b; right(a,0,0); //赋值开始 fun(a,k,b); } public static void fun(int[][] a,int n,int m) //打印结果 { for(int i = 0;i<n;i++) { for(int j = 0;j<m; j++) { System.out.print(" "+a[i][j]); } System.out.println(); } } public static void right(int[][] a,int x, int y) { if(x!=0&&y!=0&&a[x][y] != 0) { return; } else { for(int i = 0;i<m;i++) a[x][y++] = flag++; m -= 1; down(a,x+1,y-1); } } public static void down(int[][] a,int x, int y) { if(a[x][y]!=0) return; else { n -=1; for(int i = 0;i<n;i++) a[x++][y] = flag++; left(a,x-1,y-1); } } public static void left(int[][] a,int x, int y) { if(a[x][y]!=0) return; else { for(int i = 0;i<m;i++) a[x][y--] = flag++; m -=1; up(a,x-1,y+1); } } public static void up(int[][] a,int x, int y) { if(a[x][y]!=0) return; else { n -=1; for(int i = 0;i<n;i++) a[x--][y] = flag++; right(a,x+1,y+1); } } }
输出结果:
第一次发博客,不喜勿喷。欢迎来指点~谢谢