1、问题描述
打印出金字塔图案,如图1所示。
图1
2、问题分析
这时一个很经典的循环应用的问题。我们都知道,打印输出的时候,都是从
最左端输出,而这里第一个三角形符号是在最中间,这实际是因为三角形之前有很多空格。当我们使用圆圈来表示空格,实际的输出效果应该是图2的形式。
图2
分析图2,我们可以发现这个题目的奥秘。
(1) 确定程序框架
程序框架代码如下:
publicclass Ch1_1
{
public static void main(String[] args)
{
*********
for(i = 1; i<= 5; i++) //循环5次,打印5行
{
//打印若干空格
//打印若干符号
}
}
}
(2) 寻找空格和符号规律
表1 空格和符号规律
行数 |
空格数 |
符号数 |
||
1 |
4 |
5-1 |
1 |
1*2-1 |
2 |
3 |
5-2 |
3 |
2*2-1 |
3 |
2 |
5-3 |
5 |
3*2-1 |
4 |
1 |
5-4 |
7 |
4*2-1 |
5 |
0 |
5-5 |
9 |
5*2-1 |
规律 |
依次递减1 |
5-行数 |
依次递增2 |
行数*2-1 |
(3) 打印空格数
由于每行空格数有“5-行数”的规律,对应代码如下:
for(i =1; i<= n; i++)
{
for(j = 1; j <= n – i; j++) //根据外层行号,输出符号左边空格
System.out.println(“ ”);
}
(4) 打印符号数
由于每行符号数有着“行数*2-1”的规律,对应代码如下:
for(i =1; i<= n; i++)
{
for(k = 1; j <= i * 2 -1; k++) //根据外层行号,输出符号数
System.out.println(“*”);
}
(5) 完整程序
importjava.util.Scanner;
publicclass Ch1_1
{
public static void main(String[] args)
{
int i, j, k, n;
Scanner input = new Scanner(System.in);
System.out.print(“请输入金字塔层数:”);
n = input.nextInt();
//外层循环控制层数
for(i = 1; i <= n; i++)
{
//根据外层行号,输出星号左边的空格
for(j = 1; j <= n – i; j++)
System.out.printf(” “);
//根据外层行号,输出星号个数
for(k = 1; k <= 2 * i -1; k++)
System.out.print(“*”);
//一行结束,换行
System.out.print(“\n”);
}
}
}
/*
*/
程序运行结果,见图3。
图3
(6) 扩展
倒金字塔
importjava.util.Scanner;
publicclass Ch1_1
{
public static void main(String[] args)
{
int i, j, k, n;
Scanner input = new Scanner(System.in);
System.out.print(“请输入倒金字塔层数:”);
n = input.nextInt();
//外层循环控制层数
for(i = 1; i <= n; i++)
{
//根据外层行号,输出星号左边的空格
for(j = 1; j <= i – 1; j++)
System.out.printf(” “);
//根据外层行号,输出星号个数
for(k = 1; k <= 2 * (n – i) -1;k++)
System.out.print(“*”);
//一行结束,换行
System.out.print(“\n”);
}
}
}
直角三角形
importjava.util.Scanner;
publicclass Ch1_1
{
public static void main(String[] args)
{
int i, j, k, n;
Scanner input = new Scanner(System.in);
System.out.print(“请输入直角三角形层数:”);
n = input.nextInt();
//外层循环控制层数
for(i = 1; i <= n; i++)
{
//根据外层行号,输出星号个数
for(k = 1; k <= n – i + 1; k++)
System.out.print(“*”);
//一行结束,换行
System.out.print(“\n”);
}
}
}