对于平面图形输出集合图形与数字组合的,用二维数组。先在Excel表格中分析一下,找到简单的规律。二维数组的行数为行高,列数为最后一个数大小。
对于减小再增大再减小再增大的,可以用一个boolean标志其是增加还是减小状态,减到最小时将其标志设为相反的并改变这时的初值大小。
效果:
Excel中分析
Java代码:
1 package Java_Test; 2 3 public class PrintM { 4 5 /* 6 7 3 7 8 2 4 6 8 9 1 5 9 10 平面图形(二维数组) 11 12 */ 13 public static void main(String[] args) { 14 15 int atr[][]=new int[3][9]; 16 // 产生9个数,放入对应位置 17 boolean flag=false; //false代表横坐标在减小,true代表在增大 18 // 初始位置 19 int x=2; 20 int y=0; 21 for(int i=1;i<=9;i++){ 22 23 // 放入第一个数 24 atr[x][y]=i; 25 // y始终在增大 26 y++; 27 28 if(!flag){ //如果x在减小让其自减 29 x--; 30 } 31 32 if(flag){ 33 x++; 34 } 35 36 if(x<0){ //x减到0,再减为-1 37 flag=true; 38 x=x+2; 39 } 40 41 if(x>2){ //x加2,再加为3 42 flag=false; 43 x=x-2; 44 } 45 } 46 47 48 for(int i=0;i<3;i++){ 49 for(int j =0;j<9;j++){ 50 if(atr[i][j]==0){ 51 System.out.print(" "); 52 }else{ 53 System.out.print(atr[i][j]); 54 } 55 } 56 System.out.println(); 57 } 58 59 60 61 } 62 }
测试:
-------------------------------------------------------输入n个数输出M的改造--------------------------------
1 package Java_Test; 2 3 import org.junit.Test; 4 5 public class PrintM_duogeshu { 6 7 /* 8 * 9 * 3 7 2 4 6 8 1 5 9 平面图形(二维数组) 10 * 11 */ 12 public static void test1(int num) { 13 14 int height = (num / 4) + 1; // 4条边 15 16 int atr[][] = new int[height][num]; 17 // 产生9个数,放入对应位置 18 boolean flag = false; // false代表横坐标在减小,true代表在增大 19 // 初始位置 20 int x = height-1; 21 int y = 0; 22 for (int i = 1; i <= num; i++) { 23 24 // 放入第一个数 25 atr[x][y] = i; 26 // y始终在增大 27 y++; 28 29 if (!flag) { // 如果x在减小让其自减 30 x--; 31 } 32 33 if (flag) { 34 x++; 35 } 36 37 if (x < 0) { // x减到0,再减为-1 38 flag = true; 39 x = x + 2; 40 } 41 42 if (x > height-1) { // x加2,再加为3 43 flag = false; 44 x = x - 2; 45 } 46 } 47 48 for (int i = 0; i < atr.length; i++) { 49 for (int j = 0; j < atr[i].length; j++) { 50 if (atr[i][j] == 0) { 51 System.out.print(" "); 52 } else { 53 System.out.print(atr[i][j]); 54 } 55 } 56 System.out.println(); 57 } 58 59 } 60 61 @Test 62 public void test(){ 63 PrintM_duogeshu.test1(13); 64 } 65 }
测试: