2009-09-08 15:55:19 +02:00
|
|
|
// Copyright (C) 2005, Ondra Kamenik
|
|
|
|
|
|
|
|
// $Id: pascal_triangle.h 762 2006-05-22 13:00:07Z kamenik $
|
|
|
|
|
|
|
|
#ifndef PASCAL_TRIANGLE_H
|
|
|
|
#define PASCAL_TRIANGLE_H
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
2017-05-16 16:30:27 +02:00
|
|
|
namespace ogu
|
|
|
|
{
|
|
|
|
|
|
|
|
using std::vector;
|
|
|
|
|
|
|
|
class PascalRow : public vector<int>
|
|
|
|
{
|
2019-01-09 15:58:45 +01:00
|
|
|
int k{1};
|
2017-05-16 16:30:27 +02:00
|
|
|
public:
|
2019-01-10 18:24:04 +01:00
|
|
|
PascalRow() : vector<int>{}
|
2017-05-16 16:30:27 +02:00
|
|
|
{
|
|
|
|
push_back(2);
|
|
|
|
}
|
|
|
|
void setFromPrevious(const PascalRow &prev);
|
|
|
|
void prolong(const PascalRow &prev);
|
|
|
|
void prolongFirst(int n);
|
|
|
|
void print() const;
|
|
|
|
};
|
|
|
|
|
|
|
|
class PascalTriangle
|
|
|
|
{
|
|
|
|
vector<PascalRow> tr;
|
|
|
|
public:
|
|
|
|
PascalTriangle()
|
|
|
|
{
|
2019-01-09 16:00:05 +01:00
|
|
|
tr.emplace_back();
|
2017-05-16 16:30:27 +02:00
|
|
|
}
|
2019-01-10 18:24:04 +01:00
|
|
|
PascalTriangle(const PascalTriangle &triang) = default;
|
|
|
|
PascalTriangle &operator=(const PascalTriangle &triang) = default;
|
2017-05-16 16:30:27 +02:00
|
|
|
int noverk(int n, int k);
|
|
|
|
void print() const;
|
|
|
|
protected:
|
|
|
|
void ensure(int n, int k);
|
|
|
|
int max_n() const;
|
|
|
|
int max_k() const;
|
|
|
|
};
|
2009-09-08 15:55:19 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
extern ogu::PascalTriangle ptriang;
|
|
|
|
|
|
|
|
#endif
|