使用圆点和'*'画一个领结
我是C++的新手,有一个任务告诉我们输入一个整数,并使用'*'和'。'来制作一个2 * n + 1大小的领结形状。 ,例如:使用圆点和'*'画一个领结
输入:3
输出:
*.....*
**...**
***.***
*******
***.***
**...**
*.....*
,所以我想出了这一点:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n+1;i++)
{
for (int p=i;p>=1;p--)
cout<<"* ";
for (int j=n;j>(i-1);j--)
cout<<". ";
for (int j=n;j>i;j--)
cout<<". ";
for (int j=i;j>=1;j--)
cout<<"* ";
cout<<endl;
}
for(int i=n;i>=1;i--)
{
for (int j=i;j>=1;j--)
cout<<"* ";
for (int j=n;j>(i-1);j--)
cout<<". ";
for (int j=n;j>i;j--)
cout<<". ";
for (int j=i;j>=1;j--)
cout<<"* ";
cout<<endl;
}
}
,但我的长相输出像这样:
输入:3
输出:
*.....*
**...**
***.***
******** //<--1 redundant * at this row//
***.***
**...**
*.....*
所以我不知道有什么办法消除它,因为如果我尝试调整循环就不会是同样的形状了。还是有更高效的方式来完成这项任务?我已经呆了好几个小时了!谢谢!
我相信if语句可以解决这个问题。 如果语句在第一个循环的第四个inner for循环中。
for (int j=i;j>=1;j--){
if(i != n+1 || j != 1){
cout<<"* ";
}
}
cout << endl;
时i
是中间行的意思时i == n+1
你有一个额外的明星,当你j == 1
有中间行的最后一个星所以这个if语句将不显示最后一颗星星英寸你可以尝试任何输入它会工作。
非常感谢!它确实解决了这个问题,不敢相信我甚至没有想过使用它来代替!我正在研究如何尽可能减少这个问题,因为上面的这个混乱是非常难看的。我希望我很快就能在C++中变得更好! –
@PhạmSơn如果您认为我回答了问题,请[接受它](https://stackoverflow.com/help/someone-answers)。 – Tyger
完成! @泰格:D –
什么是'star'? – user4581301
请尝试缩进您的代码。缩进对于编译器来说并不重要,但对于阅读代码的人来说很重要。 –
此外,我建议你花些时间阅读Eric Lippert的[如何调试小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/),并学习如何使用调试器来逐行执行代码。 –