首页 > 解决方案 > 如何在奇数颗星星中制作星星金字塔?

问题描述

#include<iostream>
using namespace std;

int main() {
    
    int i, j;
    
    for(i = 1; i <= 5; i++) {
        
        for(j =  1; j <= i; j++) { 
            
            cout<< "*";
        }
        
        cout<< endl;
    }
    
    return 0;
}

那是我上面的代码。奇数如 1 然后 3 星然后 5 星,等等。我所有的尝试都失败了。起初,开始不停地滚动。然后只出现了一列一排星星。它应该很简单,但它不工作!

像 i%2 == 0 这样的东西不起作用。

谢谢你。

编辑:应该看起来像这样:

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

ETC

标签: c++

解决方案


如果你把它分成小块,它可能很简单。

对于初学者来说最好的策略是自下而上,即首先得到最小的部分,做最简单的事情,你不能分成更小的部分。然后一次“上升”一个级别,直到达到结合所有部分的算法的“大视图”:

  • 第一个“片段”:n在一行上打印星星:最简单的方法是使用std::string构造函数,通过重复一个字符来构造一个字符串并打印:
    std::cout << std::strin(n, '*') << '\n'

  • 第二件:为每一行获取正确的星数:你从1开始,增加2;简单的:
    for (int star_count = 1; star_count <= 7; star_count += 2)

并将它们放在一起:

for (int star_count = 1; star_count <= 7; star_count += 2)
    std::cout << std::string(star_count, '*') << '\n';

我要强调的一件事是我为变量使用了有意义的名称。在极少数情况下,类似i,n是可以接受的,并且仅在这些变量被指定用于该用途的情况下,即i用作数组中的索引。它非常有用,您应该尽快养成正确命名所有变量的习惯。

例如,如果不是继续开始次数,我会考虑我的行号和我会这样写的星数之间的关系:

for (int line_index = 1; line_index <= 4; ++line_index)
    std::cout << std::string(line_index * 2 - 1, '*') << '\n';

推荐阅读