在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

二重循环解题思路-颜群

2017-2-9 13:05| 发布者: zhangjf| 查看: 597| 评论: 0

摘要: 本文通过一道习题,讲解做二重循环习题的思路: 题目:使用二重循环打印如下图形: 分析:首先要明确我们需要打印的种类有:字符串”*”,字符串””(空格)。比如第一行,先打印了4个空格””,然 ...
本文通过一道习题,讲解做二重循环习题的思路:
题目:使用二重循环打印如下图形:

分析:首先要明确我们需要打印的种类有:字符串”*”,字符串”  ”(空格)。比如第一行,先打印了4个空格”  ”,然后打印了一个”*”
我们分析一下每行的具体打印情况:
0行:先打印4个空格,然后打印1”*”
1行:先打印3个空格,然后打印3”*”
2行:先打印2个空格,然后打印5”*”
3行:先打印1个空格,然后打印7”*”
4行:先打印0个空格,然后打印9”*”
通过上面分析,我们不难发现,0”, ”1”… ”4这些行数在重复,所以我们可以用外层循环控制行数(即打印第几行)。在每行的内部,打印n个空格又是一个重复的过程,所以可以用内层循环来控制打印空格的个数。同理,在每行的内部,打印n*也是一个重复的过程,所以可以用内层循环来控制打印”*”的个数。即:用外层循环控制打印的行数,用两个内层循环分别控制打印空格的个数和打印”*”的个数。还要注意,在把每行的空格和”*”打印完后,还需要换行。
即可得伪代码:
        public static void main(String[] args) {
                int rows = 5;
                for (int i = 0; i < 行数; i++) {
                        for (int j = 0; j < 空格的个数; j++) {
                                System.out.print(" ");
                        }
                        for (int j = 0; j < "*"的个数; j++) {
                                System.out.print("*");
                        }
                        System.out.println();//每行的空格和”*”打印完后,需要换行
                }
        }
我们在用i表示行数(第几行),用j表示打印空格的个数,用k表示打印”*”的个数,可得下表:
分析外层循环和内层循环的数学关系,可得:
i+j=4 j=4-i=(rows-1)-i, 即空格的个数等于:(当前行数-1)-i
k=2*i+1 ,即”*”的个数等于: 2*当前行数+1
现在,用计算后的关系式将伪代码中的汉字替换,即可实现等腰三角形的打印:
        public static void main(String[] args) throws Exception {
                int rows = 5;
                for (int i = 0; i < rows; i++) {
                        for (int j = 0; j < rows - i - 1; j++) {
                                System.out.print(" ");
                        }
                        for (int j = 0; j < 2 * i + 1; j++) {
                                System.out.print("*");
                        }
                        System.out.println();//每行的空格和”*”打印完后,需要换行
                }
        }
运行结果:
思考:现将题目变为:打印倒等腰三角形,如图:
该如何实现呢?
分析:对比“正等腰三角形”和“倒等腰三角形”,如下
不难发现,“倒等腰三角形”的第0行,就是“正等腰三角形”的最后一行;“倒等腰三角形”的第1行,就是“正等腰三角形”的倒数第二一行;“倒等腰三角形”的最后一行,就是“正等腰三角形”的第一行。即:把“正等腰三角形”的行数逆序输出,就变成了“倒等腰三角形”。控制“正等腰三角形”行数的是外层循环for (int i = 0; i < rows; i++),将它逆序输出,即改为for (int i = rows-1; i>=0; i--),就实现了“倒等腰三角形”的打印,如下:
        public static void main(String[] args) throws Exception {
                int rows = 5;
                // for (int i = 0; i < rows; i++)正等腰三角形
                for (int i = rows - 1; i >= 0; i--) {// 正等腰三角形等行数逆序输出
                        for (int j = 0; j < rows - i - 1; j++) {
                                System.out.print(" ");
                        }
                        for (int j = 0; j < 2 * i + 1; j++) {
                                System.out.print("*");
                        }
                        System.out.println();// 每行的空格和”*”打印完后,需要换行
                }
        }
运行结果:
思考:现将题目变为:打印菱形,如图:

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-9 19:58

Copyright 2015-2025 djqfx

返回顶部