我是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//
***.***
**...**
*.....*
所以我想知道是否有任何方法可以删除它,因为如果我尝试调整循环它将不再是相同的形状。或者有更有效的方法来完成这项任务?我已经好几个小时了!谢谢!
答案 0 :(得分:1)
我相信if语句可以解决问题。 如果语句在第一个循环的第4个内部for循环中。
for (int j=i;j>=1;j--){
if(i != n+1 || j != 1){
cout<<"* ";
}
}
cout << endl;
当i
位于中间行时,意味着i == n+1
时你有一个额外的星号,而当j == 1
你在那个中间行有最后一个星星时所以这个if语句不会显示最后一颗星。您可以尝试使用它可以工作的任何输入。