aboutsummaryrefslogtreecommitdiff
path: root/challenge-003/paulo-custodio/cpp/ch-2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-003/paulo-custodio/cpp/ch-2.cpp')
-rw-r--r--challenge-003/paulo-custodio/cpp/ch-2.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-003/paulo-custodio/cpp/ch-2.cpp b/challenge-003/paulo-custodio/cpp/ch-2.cpp
new file mode 100644
index 0000000000..cf64c51a86
--- /dev/null
+++ b/challenge-003/paulo-custodio/cpp/ch-2.cpp
@@ -0,0 +1,44 @@
+/*
+Challenge 003
+
+Challenge #2
+Create a script that generates Pascal Triangle. Accept number of rows from
+the command line. The Pascal Triangle should have at least 3 rows. For more
+information about Pascal Triangle, check this wikipedia page.
+
+*/
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+void draw_pascal(int rows) {
+ // allocate current and next row
+ std::vector<int> data[2];
+ for (int i = 0; i < 2; i++)
+ data[i].resize(rows+1);
+
+ int cur = 0;
+ data[cur][0] = 1;
+ for (int row = 1; row <= rows; row++) {
+ // print current row
+ for (int col = 0; col < rows-row; col++)
+ std::cout << ' ';
+ for (int col = 0; col < row; col++)
+ std::cout << data[cur][col] << ' ';
+ std::cout << std::endl;
+
+ // compute next row
+ int nxt = 1-cur;
+ data[nxt][0] = 1;
+ data[nxt][row] = 1;
+ for (int col = 1; col < row; col++)
+ data[nxt][col] = data[cur][col-1] + data[cur][col];
+ cur = nxt;
+ }
+}
+
+int main(int argc, char* argv[]) {
+ if (argc == 2)
+ draw_pascal(atoi(argv[1]));
+}