c# - 如何用星号打印星号图案
问题描述
我正在为我的学校图书馆做这个,我需要用 * 打印如下星号模式
* *
* *
***
*******
***
* *
* *
以下是我尝试过的,
using System;
using System.Text;
namespace Patterns
{
class Asterisks
{
static void Main(string[] args)
{
int n = 7;
for(int i = 1; i<=n; i++){
for(int j =1; j<=n; j++){
if(j==i || j==n-i+1 || i==n/2+1){
Console.Write("*");
}else{
Console.Write(" ");
}
}
Console.WriteLine();
}
}
}
}
以下输出:
* *
* *
* *
*******
* *
* *
* *
我上面的逻辑是错误的,我尝试了对循环和条件的几个编辑,但在某个地方我出错了。需要帮助来解决这个问题。谢谢
解决方案
将模式分成几部分,并分别为它们编写检查。如果任何一项检查通过,则打印一个*
,否则打印一个空格。这似乎是您已经在做的事情。您似乎只是在 if 语句中遗漏了一些析取词。
现在,您打印 a 的条件*
是:
j==i || // the "\" part
j==n-i+1 || // the "/" part
i==n/2+1 // the "-" part
你真的只需要一个条件,这两个缺失的位置会匹配。检查这一点的一种方法是检查列 ( j
) 是否是中间列,以及行 ( i
) 是否与中间行相距一格。
j == n / 2 + 1 && (i == n / 2 + 2 || i == n / 2)
你的条件有很多+ 1
s。如果您从 0 开始循环,则可以删除它们n / 2
。您可以提取到一个变量,而不是一直重复。
你的代码最终是这样的:
int n = 7;
int midRow = n / 2;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (j == i ||
j == n - i - 1 ||
i == midRow ||
j == midRow && (i == midRow + 1 || i == midRow - 1))
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
输出:
* *
* *
***
*******
***
* *
* *
推荐阅读
- memory - Altera DE10 标准使用 FPGA 写入 DDR
- c# - 使用蓝牙 C# 初始化移动热点
- javascript - RailsGem 设置导致未定义的错误
- bash - 是否可以从子目录的项目的 /bin 目录运行命令?
- postgis - 在 postgis 中识别对象是去还是返回
- java - 如何将现有的 java android 转换为 Flutter(getLifecycle() 中的 ERR)
- javascript - 我可以运行在禁用复选框中显示工具提示的 .hover 吗?
- android - 如何在颤振中构建 aar
- python - 创建一个 2D 台球游戏,球速度问题
- http - 下载对 HTTP POST 的文件响应每 16384 字节暂停一次