Project Euler - Problem 15
2012-05-05 08:22
381 查看
Starting in the top left corner of a 22 grid, there are 6 routes (without backtracking) to the bottom right corner.
How many routes are there through a 2020 grid?
解法一:
当前点到目标点的路径数=右边点到目标点的路径数 + 下边点到目标点的路径数
最右边或者最下边的一排,只能沿着目标方向垂直或者水平移动,因此路径为1。
解法二:
这是离散数学中的非降路径问题~~
可以将问题抽象为:从点(0, 0)运动到(m, n),只能朝右或者朝下运动,每次运动1步。相当于在m+n次的运动当中,选取m次来进行向右的运动,则剩下的n次就是向下的运动。
运用排列组合的数学只是,可以得出H(0, 0) = C(m+n, m) = C(m+n, n) = 40! / (20! * 20!)
How many routes are there through a 2020 grid?
解法一:
当前点到目标点的路径数=右边点到目标点的路径数 + 下边点到目标点的路径数
最右边或者最下边的一排,只能沿着目标方向垂直或者水平移动,因此路径为1。
static void HowManySteps() { long[,] matrix = new long[21,21]; for (int i = 0; i <= 20; i++) { matrix[20, i] = 1; matrix[i, 20] = 1; } for (int i = 19; i >= 0; i--) { for (int j = 19; j >= 0; j--) { matrix[i, j] = matrix[i + 1, j] + matrix[i, j + 1]; } } Console.WriteLine(matrix[0, 0]); }
解法二:
这是离散数学中的非降路径问题~~
可以将问题抽象为:从点(0, 0)运动到(m, n),只能朝右或者朝下运动,每次运动1步。相当于在m+n次的运动当中,选取m次来进行向右的运动,则剩下的n次就是向下的运动。
运用排列组合的数学只是,可以得出H(0, 0) = C(m+n, m) = C(m+n, n) = 40! / (20! * 20!)
static double JieChen(int n) { if (n == 1) return 1; else return JieChen(n - 1) * n; } static void Main(string[] args) { double mPn = JieChen(40); double m = JieChen(20); double res = mPn / m / m; Console.WriteLine(res); }
相关文章推荐
- Project Euler:Problem 15 Lattice paths
- [Project Euler] Problem 15
- [Project Euler]加入欧拉 Problem 15
- 【Project Euler】【Problem 10】Summation of primes
- [Project Euler]Problem 10
- [Project Euler] Problem 20
- Project Euler:Problem 12 Highly divisible triangular number
- Project Euler:Problem 22 Names scores
- Project Euler:Problem 41 Pandigital prime
- Project Euler:Problem 45 Triangular, pentagonal, and hexagonal
- Project Euler:Problem 68 Magic 5-gon ring
- Project Euler:Problem 76 Counting summations
- Project Euler – Problem 17
- Project Euler_Problem 26 欧拉计划26题
- [Project Euler] Problem 55
- Problem 15
- Project Euler__problem 5
- [Project Euler] Problem 22
- [Project Euler]Problem 5
- [Project Euler] Problem 21