.NET 6(C#)控制台程序:如何按输入字符数绘制三角形?
问题分析
你的代码逻辑是按输入值作为行数生成三角形,每行字符数依次为1、2、3…直到行数等于输入值,总字符数用等差数列求和公式 p*(p+1)/2 计算。比如输入6时,总字符数会是21;你提到输入6出现10个字符,应该是误输入了4(4*5/2=10)。核心问题是代码逻辑和需求完全不符——你需要的是按总字符数生成,而非行数。
解决方案
要实现按总字符数生成三角形,需先计算能完整排列的行数,再处理剩余字符:
- 找到最大整数k,使得1+2+…+k ≤ 输入的总字符数N
- 剩余字符数 = N - (k*(k+1)/2)
- 打印前k行,每行对应1到k个
* - 如果剩余字符数>0,额外打印一行包含剩余数量的
*
代码实现
static void Main() { Console.WriteLine("Enter the number of symbols to build pyramid: "); if (!int.TryParse(Console.ReadLine(), out int totalSymbols) || totalSymbols <= 0) { Console.WriteLine("Please enter a positive integer."); return; } int k = 0; int sum = 0; // 计算最大的完整行数k while (sum + (k + 1) <= totalSymbols) { k++; sum += k; } int remaining = totalSymbols - sum; // 打印完整的k行 for (int i = 1; i <= k; i++) { Console.WriteLine(new string('*', i)); } // 打印剩余字符的行 if (remaining > 0) { Console.WriteLine(new string('*', remaining)); } }
示例验证
- 输入6时,k=3(1+2+3=6),剩余0,输出3行总字符数6:
**
- 输入7时,k=3(1+2+3=6),剩余1,输出4行总字符数7:
**
内容的提问来源于stack exchange,提问作者Jacket_Montana
相关产品推荐
相关产品推荐

