如何识别打印循环的规律?编程考试三角形打印解题求助
识别打印图形类循环规律的实用技巧
针对你在三角形打印问题中遗漏右侧斜边条件的情况,分享几个能帮你快速识别行列规律的实用方法:
手动绘制坐标对照表
拿目标图形的小尺寸案例(比如width=5),把每个位置的行号r、列号c标出来,再标记哪些位置需要输出*:r=1: c1(*) c2(*) c3(*) c4(*) c5(*) → 全*(对应r==1) r=2: c1(*) c2(_) c3(_) c4(_) c5(*) → *在c=r和c=width - r +1的位置 r=3: c1(*) c2(_) c3(*) c4(_) c5(*) → *在c=r、c=width - r +1的位置把所有
*对应的r和c的数学关系列出来,就能直接发现除了c==r,还有r+c == width+1(等价于c=width - r +1)的规律。拆解图形的边界特征
打印图形的*基本都是图形的边界或填充区域,先把目标图形的边界拆解开:- 顶部边界:第一行所有列都是
*,对应r==1 - 左侧斜边:每行
r对应的列c等于行号,即c==r - 右侧斜边:每行
r对应的列c满足r+c = width+1,也就是从右侧数第r个位置
把每个边界的行列条件单独梳理出来,再组合成if判断,就不会遗漏。
- 顶部边界:第一行所有列都是
用小数值测试找共性
别上来就写代码,先用width=3、width=5这种小数值手动写出每一行的输出,对比每行中*的位置和r、c的关系。比如width=3时:r=1: *** r=2: * *盯着
*的位置计算r和c的数值关系,很快就能总结出规律。逐步迭代修正代码
先写出你能确定的条件(比如r==1 || c==r),运行代码看输出,对比目标图形找出缺失的部分。比如你原来的代码运行后,第二行只有左侧一个*,右侧缺了,这时就盯着右侧该出现*的位置,计算它的r和c的关系,就能快速发现r+c == width+1这个条件。
另外,你的代码里还有一个小错误:用了System.out.println("*"),这会导致每个字符单独占一行,应该用System.out.print()来保证同一行的字符连续输出。修正后的代码如下:
public static void drawTriangle(int width) { for (int r = 1; r <= (width + 1) / 2; r++) { for (int c = 1; c <= width; c++) { if (r == 1 || c == r || r + c == width + 1) { System.out.print("*"); } else { System.out.print("_"); } } System.out.println(); } }
内容的提问来源于stack exchange,提问作者user20146539
相关产品推荐
相关产品推荐

