使用循环结构打印下述图形,打印行数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(); } } }