使用C ++打印Floyd三角形

时间:2015-12-26 13:11:04

标签: c++

我正在尝试构建一个程序,它将接受来自用户的数字并创建Floyd三角形。

我尝试使用Floyd三角形的逻辑,但它的打印为一行。

示例:

Enter total numbers: 5
Enter the numbers: 3,8,2,4,9

O / P:

3
82
249

这是我的代码:

#include <iostream>
using namespace std;

int main()
{
    int totalnos, j, i;

    cout << "Enter total numbers: ";
    cin >> totalnos;

    int numbers[totalnos];

    cout << "Enter the numbers: ";
    for (i = 1; i <= totalnos; i++)
    {
        cin >> numbers[i];
    }


    for (i = 1; i <= totalnos; i++)
    {
        for (j = 1; j <= 1; j++)
        {
            cout << numbers[i];
        }   
    }
}

3 个答案:

答案 0 :(得分:1)

下面显示的循环类型存在问题。我不知道这种解决方案是由于你来自Pascal世界,还是因为你在其他地方看过它。无论如何,你不应该让循环从1开始并转到i,或者至少,你应该考虑在类似C的世界中( C C ++ Java C#等等),数组从索引0开始,以索引n - 1结束,为n数组的大小

int numbers[totalnos];

cout << "Enter the numbers: ";
for (i = 1; i <= totalnos; i++)
{
    cin >> numbers[i];
}

问题实际上不是您用于循环的索引,而是在访问数组时必须始终使用0..n-1。因此,您可以将循环更改为只是正确访问数组:

int numbers[totalnos];

cout << "Enter the numbers: ";
for (i = 1; i <= totalnos; i++)
{
    cin >> numbers[ i - 1 ];
}

或者您可以像C类世界中的所有程序员一样,直接在0处启动索引:

int numbers[totalnos];

cout << "Enter the numbers: ";
for (i = 0; i < totalnos; i++)
{
    cin >> numbers[i];
}

而不是从1到totalnos,现在你从0变为totalnos - 1(注意i < totalnos而不是i <= totalnos,这是一个变化。< / p>

您访问的内存超出了数组的限制,这意味着您的程序将显示未定义的行为(这意味着它可能会崩溃,但在某些情况下,似乎没有任何事情发生,这更加危险)。 / p>

现在算法本身。我还没有听说过 Floyd 三角形。它似乎是用从1开始的自然数来构建的。但是,你要求的是totalnos个数字。您需要超过totalnos个数字才能构建一个带有totalnos行的 Floyd 三角形。这就是为什么你需要调整所显示数字的位置,同时考虑每行的列数(numPos从0开始)。

cout << endl;
for (i = 0; i < totalnos; i++)
{
    if ( ( totalnos - i ) < numPos ) {
        numPos = totalnos - i;  
    }

    for (j = 0; j < i; j++)
    {
        cout << numbers[numPos] << ' ';
        ++numPos;
    }   
    cout << endl;
}

您可以在此处找到完整的代码:http://ideone.com/HhjFpz

希望这有帮助。

答案 1 :(得分:0)

内部循环可以修改如下:

for (i=0; i < 3; i++)
{

    for (j=0; j<=i; j++)
    {
        cout << numbers[i+j];


    }

    cout<<" ";
}

硬编码值“3”可以替换为“Floyd三角形的行数”。 我认为这样做会有所作为。

答案 2 :(得分:0)

在内循环中你犯了错误,j <= 1;应该是j&lt; = i; 你错过了&#39; \ n&#39;新线的字符。
这是修复:

#include <iostream>


using namespace std;
int main()
{
    int totalnos, j, i, k = 0;

    cout << "Enter total numbers: ";
    cin >> totalnos;

    //int numbers[totalnos];

    //cout << "Enter the numbers: ";
//    for (i = 1; i <= totalnos; i++)
//    {
//        cin >> numbers[i];
//    }


    for (i = 1; i <= totalnos; i++)
    {
        // your code for (j = 1; j <= 1; j++)
        for(j=1; j<=i; ++j) // fixed
          cout << k+j << ' ';
        ++k;
        cout << endl; // fix

    }
}