• 算法趣题-Q34


    一、问题描述

    二、问题分析

            自己的想法是将两个条件拆开计算,因为第二个条件的独立计算比较简单,将所有在对角线汇合的点的可能相加就可,然后对于第一个条件就进行递归搜索,记录在同一直线上的次数,在抵达目标端点时,若次数等于2时(书中实现使用的是大于等于2,于是在下面的实现中也进行了统一)总计数值加一,但是这样计算可能会有重复计数,当两人相交后,继续沿同一直线前进时(一人向上,一人向下)。

            原书中的是实现则更加巧妙,对于两种情况,将其合并实现。对于第二种情况来说,其本质上属于第一情况,相交意味值两点同时在横竖两条直线上,这样将横纵坐标分别计数就被归类为第一种情况,统一了实现条件,便于代码实现。

    三、代码实现

    1.C/C++实现

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. using namespace std;
    9. const int N = 6;
    10. int get_count(int x, int y, int p, int q, int meet)
    11. {
    12. if (x > N || y > N || p < 0 || q < 0) // 越界
    13. return 0;
    14. if (x == N && y == N && meet >= 2) // 满足条件
    15. return 1;
    16. if (x == p)
    17. meet++;
    18. if (y == q)
    19. meet++;
    20. int count = 0;
    21. count += get_count(x + 1, y, p - 1, q, meet);
    22. count += get_count(x + 1, y, p, q - 1, meet);
    23. count += get_count(x, y + 1, p - 1, q, meet);
    24. count += get_count(x, y + 1, p, q - 1, meet);
    25. return count;
    26. }
    27. int main()
    28. {
    29. cout << get_count(0, 0, N, N, 0) << endl;
    30. return 0;
    31. }

    2.Python实现

    1. # codiNg = utf-8
    2. N = 6
    3. def get_count(x, y, p, q, meet):
    4. if x > N or y > N or p < 0 or q < 0:
    5. return 0
    6. if x == N and y == N and meet >= 2:
    7. return 1
    8. if x == p:
    9. meet += 1
    10. if y == q:
    11. meet += 1
    12. count = 0
    13. count += get_count(x + 1, y, p - 1, q, meet)
    14. count += get_count(x, y + 1, p - 1, q, meet)
    15. count += get_count(x + 1, y, p, q - 1, meet)
    16. count += get_count(x, y + 1, p, q - 1, meet)
    17. return count
    18. if __name__ == '__main__':
    19. print(get_count(0, 0, N, N, 0))
    20. pass

  • 相关阅读:
    算法基础知识
    【交互式分割】——数据可视化
    Spring整合Mybatis
    高精度定时器学习(通过官方手册学习)
    SwiftUI4.0有趣的动画升级:新iOS16视图内容过渡动画
    Pytorch基于小波时频图与SwinTransformer的轴承故障诊断
    向虚拟机里拖文件,VMtools安装问题
    Jupyter Notebook 内核似乎挂掉了,它很快将自动重启
    m基于基站休眠的LTE-A异构网络中节能算法matlab仿真
    Jenkins 构建CICD
  • 原文地址:https://blog.csdn.net/qq_41893962/article/details/126096899