在C ++上绘制ascosiles三角形的asteriks

时间:2016-10-19 23:08:42

标签: c++

我正在学习c ++而我正在尝试使用asteriks绘制一个iscosceles三角形。我的代码如下:

if CATEGORY_CHOICES  == 1:
    title = 'Jobs'
    icon = 'fa fa-briefcase'
    slug = 'jobs'
elif CATEGORY_CHOICES == 2:
    title = 'Cities'
`   icon = 'fa fa-city'
    slug = 'cities'

因此上半部分出来但是如何在达到j == 10之后立即开始递减,以便我得到下半部分。请协助。

2 个答案:

答案 0 :(得分:1)

@ space_voyager的替代方案此代码支持动态大小,因此您可以根据大小定义尽可能大的代码。

这里的算法是

  1. 检查当前索引或迭代是否在中间(在本例中为11.编程为10)。
  2. 如果为true,则将j从0迭代到I的当前索引。
  3. 如果为false(表示当前索引大于中间值),则从大小迭代j - 按降序排列。
  4. 尺寸 - 我的工作原理?

    在第一次迭代时,它是真的(I> 10,因此当I = 11时)大小 - I = 21-11。你得到10,因此输出将打印10次。第二次我= 12.你去的时候会得到降低的结果。


    int main(){
        int size = 21;
    
        for(int i=1;i<size;i++){
            if(i <=size/2)
            {
                for(int j=0;j<i;j++)
                {
                    cout << "*";
                }
                cout << endl;
            }
            else if (i > size/2)
            {
                for(int j=size-i; j>0;j--)
                {
                    cout << "*";
                }
                cout << endl;
            }
        }
    
        return 0;
    }
    

    输出

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

    修改

    根据space_voyager的说法,复制粘贴代码不是最好的做法。这里有更新的代码(类似于他,我只添加了动态部分。更改大小的值,你改变了一切)

    int main(){
        int size = 20;
    
        for(int i=1;i<size;i++){
            int k;
    
            if(i <=size/2)
            {
                k = i;
            }
            else if (i > size/2)
            {
                k = size-i;
            }
    
            for(int j=0; j<k; j++)
            {
                cout << "*";
            }
            cout << endl;
        }
    
        return 0;
    }
    

答案 1 :(得分:0)

以下是如何做到的:

#include <iostream>
using namespace std;

int main(){
    for(int i=1;i<20;i++){
        int k;
        if (i<=10)
        {
            k = i;
        }
        else
        {
            k = 20-i;
        }
        for(int j=0;j<k;j++)
        {
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}

输出:

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

基本思路是将映射从三角形前半部分中的最大星号数i(直到第10行)切换到下半部分的映射20-i。三角形。