Problem 15
Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.
How many such routes are there through a 20×20 grid?
C++:
#include <iostream> #include <cstring> using namespace std; const int MAXN = 20; long grid[MAXN+1][MAXN+1]; long pathcount(int row, int col) { long count; if(grid[row][col]) return grid[row][col]; if(row == 0 && col == 0) return 1; else if(row == 0) count = pathcount(row, col - 1); else if(col == 0) count = pathcount(row - 1, col); else count = pathcount(row - 1, col) + pathcount(row, col -1); grid[row][col] = count; return count; } int main() { int n; memset(grid, 0, sizeof(grid)); while(cin >> n && n <=MAXN) { long ans = pathcount(n, n); cout << ans << endl; } return 0; }
C++:
#include <iostream> using namespace std; const int MAXN = 20; long grid[MAXN+1][MAXN+1]; int main() { int n; while(cin >> n && n <=MAXN) { for(int j=0; j<=n; j++) grid[0][j] = 1; for(int i=1; i<=n; i++) { grid[i][0] = 1; for(int j=1; j<=n; j++) grid[i][j] = grid[i][j-1] + grid[i-1][j]; } cout << grid[n][n] << endl; } return 0; }