首页 > 解决方案 > 如何使用 C++ 打印蝴蝶图案?

问题描述

所以我正在参加一个 C++ 课程,在此期间我被要求编写一个程序来打印以下蝴蝶图案:

*      *
**    **
***  ***
********
********
***  ***
**    **
*      *

所以,这就是我写的:

#include<iostream>
using namespace std;

int main()
{
    
    int n;
    cin>>n;

    for(int row=1; row<=n; row++){
        for(int j=1; j<=2*n; j++){
            if(j<=row||j>=(2*n)-row){
                cout<<"*";
            
            }
            else{
                cout<<" ";
            }
        }
        cout<<endl;
    }
    for(int row=n; row>0; row--){
        for(int j=1; j<=2*n; j++){
            if(j<=row||j>=(2*n)-row){
                cout<<"*";
            
            }
            else{
                cout<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

但我无法得到想要的结果。可能是什么原因?

标签: c++

解决方案


条件j>=(2*n)-row不对。

您将希望将row左侧的row字符和右侧*的字符设置为空格,而将其他字符设置为空格。

例如,让我们考虑row=1大小写。

考虑“从左到右”部分,条件j<=row是正确的,并且在一种情况下是正确的j=1

另一方面,考虑“从右”部分,条件j>=(2*n)-row将在两种情况下为真j=2*n-1j=2*n

*要解决此问题,您应该从右数减一。

这可以通过将条件(两个)更改为 来完成j>=(2*n)-(row-1)


推荐阅读