鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 欧拉计划

题目15:从20*20的网格的左上角通往右下角有多少条路?

[复制链接]
发表于 2022-2-5 21:15:19 | 显示全部楼层
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. using namespace std;
  5. double nCr(double n,double r)
  6. {
  7.     if(n<r)
  8.     {
  9.         cerr<<"'n<r'!"<<endl;
  10.         exit(EXIT_FAILURE);
  11.     }
  12.     double ret = 1;
  13.     while(r>0)
  14.         ret *= n--/r--;
  15.     return ret;
  16. }

  17. int main()
  18. {
  19.     cout<<std::fixed<<nCr(40,20);
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 22:45:26 | 显示全部楼层
  1. package main

  2. import (
  3.         "fmt"
  4.         "time"
  5. )

  6. //题目:
  7. //
  8. //从一个 2×2 网格的左上角开始,有 6 条(不允许往回走)通往右下角的路。
  9. //
  10. //对于 20×20 的网格,这样的路有多少条?

  11. func main() {
  12.         t := time.Now()
  13.         var i, j int = 0, 0

  14.         m := make(map[int]map[int]int64)
  15.         sm := make(map[int]int64)
  16.         for i = 0; i < 21; i++ {
  17.                 sm[i] = 1
  18.         }
  19.         sm[0] = 0
  20.         m[0] = sm

  21.         for i = 1; i < 21; i++ {
  22.                 sm := make(map[int]int64)
  23.                 sm[0] = 1
  24.                 for j = 0; j < 21; j++ {
  25.                         sm[j+1] = sm[j] + m[i-1][j+1]
  26.                 }
  27.                 m[i] = sm
  28.         }
  29.         fmt.Println(m[20][20])
  30.         tt := time.Now()
  31.         fmt.Println("耗时:", (tt.Nanosecond()-t.Nanosecond())/1e6, "ms")
  32. }
复制代码

输出:
  1. 137846528820
  2. 耗时: 0 ms
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-23 13:51:45 | 显示全部楼层
137846528820.0
It costs 0.000034 s

  1. import time as t
  2. from functools import reduce

  3. start = t.perf_counter()
  4. ways = reduce(lambda x, y: x*y, range(1,41))/(reduce(lambda x, y: x*y, range(1, 21)))**2

  5. print(ways)
  6. print('It costs %f s' % (t.perf_counter() - start))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 12:08:16 | 显示全部楼层
  1. use std::time::Instant;

  2. fn main() {
  3.     let now = Instant::now();
  4.     let num = c(20);
  5.     println!("cost {} ms.", now.elapsed().as_millis());
  6.     println!("{num}")
  7. }

  8. fn c(n: u128) -> u128 {
  9.     let mut value = 1u128;
  10.     for i in n + 1..2 * n + 1 {
  11.         value *= i
  12.     }
  13.     for i in 1..n + 1 {
  14.         value /= i
  15.     }
  16.     value
  17. }
复制代码

---
cost 0 ms.
137846528820
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-30 07:16:30 | 显示全部楼层
标数法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表