控制台绘制沙漏:底部部分实现失败求助(附代码与预期效果)
解决控制台沙漏底部绘制问题
直接补全底部和中间部分的代码,完美适配奇数、偶数的情况:
public static void hourglass(int n) { // Top for (int i = 0; i < n / 2; i++) { for (int j = 0; j < i; j++) { Console.Write(" "); } Console.Write("*"); for (int j = 0; j < n - 2 - 2 * i; j++) { if (i == 0) { Console.Write("*"); } else { Console.Write(" "); } } Console.WriteLine("*"); } // Middle (only for odd n) if (n % 2 != 0) { for (int j = 0; j < n / 2; j++) { Console.Write(" "); } Console.WriteLine("*"); } // Bottom for (int i = n / 2 - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { Console.Write(" "); } Console.Write("*"); for (int j = 0; j < n - 2 - 2 * i; j++) { if (i == 0) { Console.Write("*"); } else { Console.Write(" "); } } Console.WriteLine("*"); } }
关键说明
- 底部实现:把顶部的循环逻辑直接反向执行——i从
n/2 -1递减到0,就能反向输出顶部的行,刚好对应沙漏下半部分。 - 中间行处理:当n为奇数时,单独输出一行居中的
*,比如n=7时的第四行。 - 适配验证:测试n=8和n=7,输出完全匹配你给出的示例。
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

