如何反转直角三角形(Java)
我有一个嵌套循环,它打印一个三角形的数字,如下所示:
123
12
1
我需要另一个三角形,但它必须倒过来,这样两个三角形才能在下面形成一个空三角形,就像这样:
12321
12 21
1 1
这是我的第一个循环:
for (i = n; i >= 1; i--) {
System.out.println();
for (j = 1; j <= i; j++) {
System.out.print(j);
}
}
System.out.println();
我添加了另一个循环:
for (j = n; j >= 1; j--) {
System.out.print(j);
}
现在数字颠倒了,但重复了,就像这样:
123321
12321
1321
# 1 楼答案
这是一个稍微“聪明”一点的解决方案:
它使用
abs
,因此它可以对1-2-3-2-1序列使用单个内部循环,并通过与行号进行比较来决定是否打印数字或空格# 2 楼答案
我将用以下方式描述您想要做的事情:
n-i-1
编号asc李>实施:
# 3 楼答案
这是我的解决方案:
它是如何工作的?让我们简化代码:
我们只需打印矩形:
现在,对于每一行,我们需要打印k<;=我
并且:
# 4 楼答案
下面是一个使用单个
char[]
的精简优化版本:它可以打印大小为1到35的有效三角形。见最后的例子
逻辑是这样的:
所有行的长度都相同,因此可以使用一个大小合适的
char[]
if
语句来跳过它只会使代码复杂化,没有任何好处递增的一位数是在base-36中完成的,因此它可以处理大小不超过35的三角形
从技术上讲,代码应该为
size
值抛出IllegalArgumentException
,超出支持的范围1-35打印第一行的所有数字
所有后续行与前一行基本相同,只是中间空白区域的大小有所增加,所以每次迭代只需再清空两个字符。第一次迭代将再次双重分配,但没有问题,就像以前一样
为了保存
print
语句,打印实际上是在循环开始时完成的,因此最后一次迭代将生成一个完全空白的行,但不会打印正如承诺的那样,以下是示例输出:
printHollowTriangle(1);
printHollowTriangle(2);
printHollowTriangle(3);
printHollowTriangle(35);