如何用C ++中的pascal三角形打印曲棍球棒的元素?

时间:2018-06-10 09:06:06

标签: c++ algorithm

曲棍球棒的起始行号和长度将作为输入。我们需要打印曲棍球棒的元素,不包括总和。

以下代码打印10行的pascal三角形(行:0到行:9)。如何添加代码来获取曲棍球棒的元素?

#include<iostream>
using namespace std;

int main()
{
    int l, r, arr[10][10];
    for (int i=0; i<=9; i++)
    {
        for(int j=0; j<=i; j++)
        {
            if((i==j)||(j==0))
            {
                arr[i][j] = 1;
                cout << arr[i][j] << " ";
            }
            else
            {
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
                cout << arr[i][j] << " ";
            }
        }
        cout << endl;
    }


 return 0;
}

它给出如下输出,

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

现在我们需要采取曲棍球杆的起始行和长度, 让我们来 从第3行开始 长度为4

1
1 1
1 2 1
**1** 3 3 1
1 **4** 6 4 1
1 5 **10** 10 5 1
1 6 15 **20** 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
播种曲棍球棒形成就好了,

1 + 4 + 10 + 20 = 35

我们需要打印最终输出,如下所示

1+4+10+20

注意:无需打印sum元素-35

================================= 我添加了以下代码,

cout <<"enter starting row-\n";
cin >> r;
cout << "enter length of hockey stick-\n";
cin >> l;
cout << "\nelements of hockey stick-\n";

int j=0;
for (int i=r; i<=(r+l-1); i++)
{
    int j = i-r;
    cout << arr[i][j] << " ";
}
cout << endl;

输出为 -

enter starting row-
3
enter length of hockey stick
4

elements of hockey stick-
1 4 10 20

但我需要它如下。

1+4+10+20

1 个答案:

答案 0 :(得分:1)

HolyBlackCat的暗示一般都是正确的......

...除了最后一个元素也会以+为后缀。

这就是为什么我建议将它转过来:为除+之外的每个元素添加前缀。这是通过一个空的初始分隔符串来实现的。它在循环结束时被覆盖:

const char *sep = "";
//int j=0; // unused
for (int i=r; i<=(r+l-1); i++)
{
    int j = i-r;
    cout << sep << arr[i][j];
    sep = " + ";
}
cout << endl;

注意:

循环中sep的赋值可能不需要第一次迭代。 AFAIK,这通常比额外if测试便宜。