C++ Floyd Triangle from range



我想创建一个程序,输出是:

Input : 7
1
23
456
7123
45671
234567
1234567

But the output i get is:
1
12
123
1234
12345
123456
1234567
我代码:

#include<iostream>
using namespace std;
int main()
{
int i, j, k;
cin >> i;
for (j=0; j<=i; ++j){
   for (k=1; k<=j; ++k){
     cout << k;
  }
   cout << "n";
  }
return 0;
}

我应该在这里修复什么使它像顶部的输出?谢谢你的帮助。

您需要进行一些更改。

for (j=0; j<=i; ++j)

0开始循环。这意味着在运行k<=j之前,内循环的迭代永远不会发生,因为k从1开始,这意味着你只打印一个空行。您需要在1而不是0处启动循环以修复此问题。

其次,您需要添加另一个变量来跟踪您在序列中的位置。好消息是,我们可以使用模块化数学来确保它为我们包装回1。这样做会得到像

这样的东西
#include<iostream>
using namespace std;
int main()
{
    int i, j, k, output = 1;
    cin >> i;
    for (j = 1; j <= i; ++j) {
        for (k = 1; k <= j; ++k) {
            cout << output;
            if (output % i == 0) // wrap back to one once output == i
                output = 1;
            else
                ++output;
        }
        cout << "n";
    }
    return 0;
}

等于

1
23
456
7123
45671
234567
1234567

您不必打印j或k。
打印值不依赖于它们:

int main()
{
    int max, j, k, count = 0; //Add a count value
    std::cin >> max;
    for (j = 0; j <= max; ++j) {
        for (k = 1; k <= j; ++k) {
            count %= max; //If count exceed the entered number
            count++;
            std::cout << count;
        }
        std::cout << "n";
    }
    while (1);
    return 0;
}

在你的内循环变量k总是从1

   for (k=1; k<=j; ++k){
        ^^^ 
     cout << k;
  }

因此每个输出行也从1开始到j。

一个简单的方法如下所示。您声明了一个变量,该变量始终递增,而不依赖于循环的索引。

这是一个示范程序。

#include <iostream>
int main() 
{
    while ( true )
    {
        unsigned int n;
        std::cout << "Enter a non-negative number (0 - exit): ";
        if ( not ( std::cin >> n ) or ( n == 0 ) ) break;
        std::cout << 'n';
        for ( unsigned int i = 0, value = 0; i++ < n;  )
        {
            for ( unsigned int j = 0; j < i; j++ ) 
            {
                std::cout << ++value ;
                value %= n;
            }
            std::cout << 'n';
        }
        std::cout << std::endl;
    }
    return 0;
}

如果输入7,则其输出如下所示

Enter a non-negative number (0 - exit): 7
1
23
456
7123
45671
234567
1234567
Enter a non-negative number (0 - exit): 0

在这个程序中,引入了一个辅助变量value,它总是递增的,然后像value %= n那样求值

我认为这是最简单明了的方法。

如果程序不是在vc++中编译的(由于语言扩展的设置),那么你可以替换这个语句

if ( not ( std::cin >> n ) or ( n == 0 ) ) break;

if ( !( std::cin >> n ) || ( n == 0 ) ) break;

最新更新