C ++: треугольник Паскаля — странные результаты

Это мой первый вопрос, поэтому не сердитесь на меня, если я что-то сделал не так.
Я должен сделать C ++ программу, которая возвращает элемент из выбранной строки, например:

Triangle 4 0 1 2 3

должен вернуть элементы: 0, 1, 2 and 3 из строки № 4, но возвращает странные вещи, такие как:

Element 0: 1
Element 1: 10179988
Element 2: 50792126
Element 3: 91425820

Я не имею понятия почему
Вот мой код:

#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;

class Pascal {
private:
int *tab;

public:
Pascal(int n) throw(string) {
if (n < 0)
throw (string)"";

tab = new int[n+1];

for(int i = 1; i <= n; i++) {
for(int k = i; k >=0; k--) {
if (k - 1 >= 0)
tab[k] += tab[k-1];
else
tab[k] = 1;
}
}
};

int element(int m) {
return tab[m];
}
};

int main(int argc, char* argv[]) {
int n = 0, m = 0, elem = 0;

try {
n = strtol(argv[1], NULL, 0);
Pascal *row;

for(int i = 2; i < argc; i++) {
try {
m = strtol(argv[i], NULL, 0);
row = new Pascal(n+1);

if (m <= n && m >= 0) {
elem = row->element(m);
cout << "Element " << m << ": "<< elem << endl;
} else
cout << m << " - bad element index" << endl;

} catch (string ex) {
cout << argv[i] << " - bad element index!" << endl;
continue;
}

delete[] row;
}
} catch (string e) {
cout << argv[1] << " - bad row index!" << endl;
return 0;
}
}

Буду благодарен за любой ответ

0

Решение

Пытаться

tab = new int[n+1];

for(int i = 0; i <= n; i++) {
tab[i] = 1;
for(int k = i; --k > 0; )
tab[k] += tab[k-1];
}
0

Другие решения

           tab = new int[n+1];

for(int i = 1; i <= n; i++) {
for(int k = i; k >=0; k--) {
if (k - 1 >= 0)
tab[k] += tab[k-1];
else
tab[k] = 1;
}
}

first iteration:  i=1, k=1, tab[1]+=tab[0];
second iteration: i=1, k=2, tab[2]+=tab[1];

Таким образом, вы не правильно инициализируете свой массив, вы просто добавляете в память все значения …

Думаю заменить if (k - 1 >= 0) с if (k - 1 > 0) должен решить вашу проблему

2

По вопросам рекламы [email protected]