c++ 打印模式,而不使用row变量迭代内部循环

cnh2zyt3  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(104)

打印以下图案:

4 (input)
1   
2   3   
3   4   5   
4   5   6   7

下面代码的一般方法是:

int main ()
{
    int row = 1, col, count, N;
    input N;
    while(row <=N) {
        col = 1; count = row ;
        while(col<=row){
            print count;
            col++; count++;
        }
        row++; newline;
    }
    return 0;
}

但是我想打印相同的模式,而不使用row作为输入来计数。为此,我的一般思维过程是记录每行的最后一个元素,然后在下一行中生成与第一个元素相同的元素。
我把‘k’作为一个变量来记录每一行中最后一个元素的值;那么它的伪代码如下:

int main ()
{
    int row = 1,k =1, col, count, N;
    input N;
    while(row <=N) {
        col = 1; count = k;
        while(col<=row){
            print count;
            col++; k = count; count++;
        }
        row++; newline;
    }
    return 0;
}

但这给了我以下模式:

4 (input)
1   
1   2   
2   3   4   
4   5   6   7

有人能帮我打印出原始模式,而不使用行变量作为输入来计数吗?

l3zydbqr

l3zydbqr1#

我想我已经找到解决办法了,虽然我对它不是很有信心。它是有效的,但如果有一个有效的方法来解决这个问题,请一定提出来。

#include <iostream>
using namespace std;
int main() {
    int i = 1, j, iter, k=1, N;
    cin>>N;
    while(i<=N){
        j = 1; iter = k; 
        while(j<=i){
            cout<<iter<<" ";
            if(j==2){k = iter;}
            iter ++; j ++;
        }
        if(j==2){k = iter;}
        i++; cout<<endl;
    }
    return 0;
}
yv5phkfx

yv5phkfx2#

既然你似乎在学习C++,我想我会让你走上一条更好的道路,向你展示你可以:

  • 没有不必要的变数。
  • 必要变量的更好名称(r代表行而不是ic代表列而不是j)。
  • 必要变量的作用域更小(它们不会过早地被声明、被单位化,并且一旦不再需要它们就退出作用域)。
  • 更清晰的循环(变量初始化,退出条件和增量保持在一起,不像while那样)。
  • STL中提供了更好的文本格式。
  • 没有人为的限制,把一个简单的代码变成一个复杂的。

在编写代码时,请尽量记住以上几点,这样您就可以阅读/理解几年前的代码。
无论如何,结果会是这样的:

#include <iostream>
#include <iomanip>
int main() {
    int n; std::cin >> n;
    for (int r = 1; r <= n; ++r) {
        for (int c = 0; c < r; ++c)
            std::cout << std::setw(3) << (r + c);
        std::cout << std::endl;
    }
    return 0;
}

相关问题