如何用Java实现降序排列的Floyd三角形?
Java实现指定样式的反向Floyd三角形
先拆解这个三角形的核心规律:
- 第
n行包含n个数字 - 第
n行的第一个数字是三角形数,计算公式为n*(n+1)/2(比如第5行的起始数是5*6/2=15) - 每行数字从起始值开始依次递减1,直到输出
n个数字
你的现有代码存在几个问题:
- 外层循环
i<15会生成14行,远超示例的5行,需要明确控制行数 - 内层循环
j<i导致第一行(i=1)无输出,因为j=1不满足j<i的条件 - 数字计算的公式逻辑错误,没有利用三角形数的规律
以下是修正后的代码:
public class ReverseFloydTriangle { public static void main(String[] args) { int totalRows = 5; // 要输出的总行数,可按需修改 int startNum; for (int row = 1; row <= totalRows; row++) { // 计算当前行的起始数字 startNum = row * (row + 1) / 2; // 输出当前行的row个数字,从startNum递减 for (int count = 1; count <= row; count++) { System.out.print(startNum + " "); startNum--; } // 每行结束换行 System.out.println(); } } }
代码说明:
totalRows变量用于指定要输出的行数,示例中设为5,对应题目要求的样式- 外层循环遍历每一行,从1到
totalRows - 每次循环先通过三角形数公式计算当前行的起始数字
- 内层循环负责输出当前行的所有数字,每输出一个就将数字减1
- 每行输出完成后执行换行,保证格式和示例一致
如果要优化输出格式(去掉每行末尾的空格),可以用StringBuilder拼接后再输出:
public class ReverseFloydTriangle { public static void main(String[] args) { int totalRows = 5; int startNum; StringBuilder rowBuilder; for (int row = 1; row <= totalRows; row++) { startNum = row * (row + 1) / 2; rowBuilder = new StringBuilder(); for (int count = 1; count <= row; count++) { rowBuilder.append(startNum).append(" "); startNum--; } // 去掉末尾的空格后输出 System.out.println(rowBuilder.toString().trim()); } } }
内容的提问来源于stack exchange,提问作者kshitij_sawant
相关产品推荐
相关产品推荐

