代码之家  ›  专栏  ›  技术社区  ›  Ali Sepehri-Amin

如何在循环中增加和减少一系列数字

  •  -1
  • Ali Sepehri-Amin  · 技术社区  · 6 年前

    我试图得到这样的输出:

                   1
               2   4   2
            3  5   7   5   3
        4   6  8   10  8   6   4
    5   7   9  11  13  11  9   7   5
    

    我写了这段代码:

    int input_n = 0;
    int x;
    int rowNumber = 1;
    
    std::cin >> input_n;
    
    int result = 0;
    
    for (int i = 1; i <= input_n; i++)
    {
        std::cout << std::setw(10 - i);
        rowNumber = i;
        int addCounter = rowNumber - 1;
    
        if (rowNumber == 1)
        {
            std::cout << std::setw(11) << rowNumber;
        }
        else 
        {
            for (x = 1; x <= rowNumber + 1; x++)
            {
                std::cout << rowNumber << std::setw(3);
                // What Should do here?
            }
    
        }
        std::cout << std::endl;
    
    }
    

    最后我得到了这个输出:

                  1
               2  2  2
             3  3   3   3
           4   4   4   4   4
         5   5   5   5   5   5
    

    我只是很困惑,我怎么能得到高于输出的结果呢?我试了很多圈呜呜声。但我没有得到正确的输出。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Eljay    6 年前

    下面是一个简单的代码示例:

    #include <iomanip>
    #include <iostream>
    #include <sstream>
    #include <string>
    
    using std::cin;
    using std::cout;
    using std::ostream;
    using std::ostringstream;
    using std::right;
    using std::setw;
    using std::string;
    
    void tree(ostream&, int n);
    
    void tree(ostream& o, int n)
    {
        auto indent = [](auto amount) { return string(static_cast<string::size_type>(amount), ' '); };
        auto format = [](auto value) { ostringstream s; s << right << setw(3) << value; return s.str(); };
    
        for (int i = 1; i <= n; ++i)
        {
            o << indent((n - i) * 3);
    
            for (int x = 1; x < i * 2; ++x)
            {
                o << format(i + (x - 1) * 2 + (x > i ? x - i : 0) * -4);
            }
    
            o << '\n';
        }
    }
    
    int main()
    {
        int input_n = 0;
    
        if (cin >> input_n)
        {
            tree(cout, input_n);
        }
    }
    
        2
  •  1
  •   Leonardo Silvagni    6 年前

    看看这个

    Arithmetic progression ,应说明递增和递减的过程与原因2的数字。 一行中的位数是 rownumber + rownumber - 1 2*rownumber -1 ,然后数字增加两个 (rownumber*2-)/2 然后开始减少两个。