1、打印直角三角形
(1) 西南方向的直角三角形
为了便于观察i和j的关系,我们将 i 和 j 放在同一水平面去画,下面的图同理,不再赘述。然后我们发现,关键点在于找到星星和空格的分界点。很明显分界点在j=i的位置,我们只要让j从左到右扫描,扫描到分界点就停止。
for(int i=1; i<=3; i++){
for(int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
*
**
***
(2) 东北方向的直角三角形
显然分界点也是j=i的位置。不过这一次我们的j要从右到左扫描,扫描到分界点停止。
for(int i=1; i<=3; i++){
for(int j=3; j>=i; j--){
System.out.print("*");
}
System.out.println();
}
***
**
*
(3) 东南方向的直角三角形
前面我们是从有星星的位置开始打印,打印到没星星的位置就停止,不用去管空格。
现在星星都在偏右的位置,因此我们要去管空格了。如果我们的j从左到右扫描,思路变成了在分界点之前我们打印空格,在分界点之后我们打印星星。
显然,此时的分界点在于j=4-i。
for(int i=1; i<=3; i++){
for(int j=1; j<=3; j++){
if(j < 4-i){
System.out.print(" ");
}else{
System.out.print("*");
}
}
System.out.println();
}
*
**
***
(4) 西北方向的直角三角形
显然,此时的分界点也是4-i,j的扫描方向是从左到右。
for(int i=1; i<=3; i++){
for(int j=1; j<=3; j++){
if(j <= 4-i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
***
**
*
(5)九九乘法表
九九乘法表就是西南方向的直角三角形。
//打印九九乘法表
for(int i=1; i<=9; i++){
for(int j=1; j<=i; j++){
System.out.print( i + "x" + j + "=" + (i * j) + "\t");
}
System.out.println();
}
}
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
(6)打印等腰三角形
方法一:
这里有个比较巧妙的地方,就是如果我们把星星和后面的一个空格看做整体,问题竟然转换成了《(3)东南方向的直角三角形》,如下图。可以看下代码,除了打印星星的时候加一个空格,其他的都一样。
关键点在于我们要知道:
第一行,星星开始的位置在3,有一个星星(内循环1次)
第二行,星星开始的位置在2,有两个星星(内循环2次)
第三行,星星开始的位置在1,有三个星星(内循环3次)
第n行,星星开始的位置在4-i,有n个星星(内循环n次)
for(int i=1; i<=3; i++){
for(int j=1; j<=3; j++){
if(j < 4-i){
System.out.print(" ");
}else{
System.out.print("* ");
}
}
System.out.println();
}
*
* *
* * *
方法二:
关键点在于我们要知道:
第一行,星星开始的位置在3,有一个星星(内循环1次)
第二行,星星开始的位置在2,有两个星星(内循环2次)
第三行,星星开始的位置在1,有三个星星(内循环3次)
方法1是j从左到右扫描,如果j从右到左扫描可不可以呢?
j从左到右扫描的话,j是到4-i就停止;
j从右到左扫描的话,因为我们要控制第1行内循环1次,第2行内循环2次,第3行内循环3次,那首先j只能是从3到1变化了。然后我们看上面的图,第一行要先打印2个空格,j从3开始的话,刚好离i的位置也是两步;第二行打印1个空格,j从3开始的话刚好离i的位置也是1步。然后看下面的代码就明白了为什么j小于等于i是个分界点了。
但是很明显从右到左扫描不符合我们正常的思路。但也是种方法吧,这也告诉我们其实打印东南方向的直角三角形也是可以让j从右到左扫描打印出来的,相当于颠倒的思路咯。
for(int i=1; i<=3; i++){
for(int j=3; j>=1; j--){
if(j <= i){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
*
* *
* * *
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)