面试题,打印如下形状:
解题思路:
- 解类似的问题,都使用二维数组保存数据
- 从图上可以看出,有多少个数据,数组第二维的长度应该是最后一个数据的值,例如上图中最后为17,则二维数组第二维长度应该为17,第一维长度,可以自己选择。
- 假设使用arr[5][17]表示数据存储的二维数组。arr[x][y]表示其中一个数据。从图中可以看出,y的值是从0一直增加的,直到17。而x的值是变化的,变化规律为4,3,2,1,0,1,2,3,4,3,2,1,0,1,2,3,4,也就是说从4开始减小知道为0,然后在增加到4
代码实现:
public class MProblem {
public static void main(String[] args) {
new MProblem().printM(140, 10);
}
public void printM(int num, int row) {
int width = num;
int height = row;
int[][] arr = new int[height][width];
int x = height - 1;
int y = 0;
//false表示减
boolean flage = false;
for(int i=0; i<num; i++) {
arr[x][y] = i+1;
y++;
if(false == flage) {
x--;
} else {
x++;
}
if(x>height-1) {
x = height -2;
flage = false;
}
if(x<0) {
x = 1;
flage = true;
}
}
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
if(arr[i][j] == 0) {
System.out.print(" ");
} else {
System.out.print(arr[i][j]);
}
}
System.out.println();
}
}
}