使用循环结构打印下述图形,打印行数n由用户输入。图中每行事实上包括两部分,中间间隔空格字符数m也由用户输入。
样例输入n,m:
5 4
样例输出:
* *********
*** *******
***** *****
******* ***
********* *
注意:两行之间没有空行。
看到这个题,我这个人就比较懒,不想去打印三角形,就把他们直接看作一个矩形,然后我们把这个里面的空格打出来不就行了,建立一个二维数组,全部赋值为“ * ” ,然后我们把空格处都和原来的一替换,然后打印这个二维数组就行了
我们要严格的进行打印要和人家一样,要不然是0分哦!!!
矩形的行已经知道了,我们得算出列,根据它给出的输出,我们可以推出二维数组的列为((n*2-1)+n+m)
然后它两边的空格是 n-2 然后每行每次在减1,中间的空格我们就每次打印m个,然后每次向右边挪一下就行,
代码如下:
package 算法提高;
import java.util.Scanner;
public class Test88_01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int y=n-2;
int z=(n*2-1)+m+n;
int[][] a = new int[n][z];
//全部初始化为“ * ”
for (int i = 0; i < n ; i++) {
for (int j = 0; j < z; j++) {
a[i][j]='*';
}
}
//打印左上的空格,从最小往最大行打印
for (int i = 0; i < n; i++,y--) {
for (int j =y; j>=0; j--) {
a[i][j]=' ';
}
}
//打印右下的空格,从最大往最下行打印
y = n-2;//因为我们上面打印的时候y已经是-1,所以我们在这里重新赋值
for (int i = n-1; i >= 0; i--,y--) {
for (int j =z-1-y; j<z ; j++) {
a[i][j]=' ';
}
}
//打印中件的空格,每次都根据行来加,就实现了每次向右移一格
for (int i = 0; i < n; i++) {
for (int j = n; j <n+m ; j++) {
a[i][i+j]=' ';
}
}
//输出这个二维数组
for (int i = 0; i < n ; i++) {
for (int j = 0; j < z; j++) {
//因为int和char,是可以转换的,所以我们建立的int型数组是可以打印的
System.out.printf("%c",a[i][j]);
}
System.out.println();
}
}
}