题解 | #循环汉诺塔#

循环汉诺塔

https://www.nowcoder.com/practice/cdf0808f841748faba058c8ef538c731

#include<iostream>
#include<vector>

using namespace std;
// 以下是@Muuuuuuu的解题思想,仅做借鉴学习*****************
//根据题目规定,易知该情况下,只有底部,没有顶部,从A移动到B需要1次操作(A→B),从A移动到C需要2次操作(A→B,B→C)。

//设函数AB(N)为把N个盘从A移动到B需要操作的次数,函数AC(N)为把N个盘从A移动到C需要操作的次数。

// 因此我们可以记为当N=1时,AB(1)=1,AC(1)=2。
//A移动到B时
/*首先需要把顶部从A移到C,再把底部从A移到B,最后把顶部从C移到B。

一共会有5次操作,即1、A→B,2、B→C,3、A→B,4、C→A,5、A→B。

实际上,AB(N)可以视为是由3个子问题组成的,即1、顶部移动两次,2、底部移动一次,3、顶部移动两次;

子问题1实际上是AC(N-1)的问题;

子问题2由于底部只有一个盘,所以子问题2的值恒等于AB(1),即值为1;

子问题3实际上也是AC(N-1)的问题;

所以AB(N)=AC(N-1)+1+AC(N-1)

简化一下,AB(N)=2AC(N-1)+1*/

/*A移动到C时:
首先将顶部从A移到C,再将底部从A移到B,再将顶部从C移到A,再将底部从B移到C,最后将顶部从A移到C。

一共有7次操作,即:1、A→B,2、B→C,3、A→B,4、C→A,5、B→C,6、A→B,7、B→C。

同样的,AC(N)也可以视为由5个子问题组成,即:1、顶部移动两次,2、底部移动一次,3、顶部移动一次,

4、底部移动一次,5、顶部移动两次;

子问题1实际上是AC(N-1)的问题;

子问题2由于底部只有一个盘,所以子问题2的值恒等于AB(1),即值为1;

子问题3实际上是AB(N-1)的问题;

子问题4也是值恒为1;

子问题5实际上也是AC(N-1)的问题;

所以AC(N)=AC(N-1)+1+AB(N-1)+1+AC(N-1)

简化一下,AC(N)=2AC(N-1)+AB(N-1)+2*/

void RecurHanoi(int index, int n, vector<long long int> &AB, vector<long long int> &AC){
    //index = 2 初始化使用该函数
    // AB[1] = 1, AC[1] = 2;
    if(index > n){
        return;
    }
    // AB[n] = 2*AC[n-1] + 1
    // AC[n] = 2*AC[n-1] + AB[n-1] + 2
    // 这里注意要先取模,要不会数据太大,会出现负数
    AB[index] = (2*AC[index-1] + 1)%1000000007;
    AC[index] = (2*AC[index-1] + AB[index-1]  + 2)%1000000007;
    index++;
    RecurHanoi(index, n, AB, AC);
}

int main(){
    int n = 0;
    cin >> n;
    int id = 2;
    vector<long long int> AB(n+1, 1);
    vector<long long int> AC(n+1, 2);
    RecurHanoi(id, n, AB, AC);
    cout << AB[n] << ' ' << AC[n] << endl;
    return 0;
}

#解题#
全部评论

相关推荐

点赞 评论 收藏
分享
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8028次浏览 74人参与
# 你的实习产出是真实的还是包装的? #
1491次浏览 37人参与
# MiniMax求职进展汇总 #
23498次浏览 305人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7259次浏览 40人参与
# 简历第一个项目做什么 #
31428次浏览 318人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186693次浏览 1118人参与
# 米连集团26产品管培生项目 #
5305次浏览 213人参与
# 研究所笔面经互助 #
118827次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433194次浏览 3924人参与
# 简历中的项目经历要怎么写? #
309803次浏览 4174人参与
# 面试紧张时你会有什么表现? #
30450次浏览 188人参与
# AI时代,哪些岗位最容易被淘汰 #
63087次浏览 770人参与
# 正在春招的你,也参与了去年秋招吗? #
362979次浏览 2635人参与
# 你怎么看待AI面试 #
179643次浏览 1203人参与
# 职能管理面试记录 #
10765次浏览 59人参与
# 网易游戏笔试 #
6420次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160510次浏览 1107人参与
# 校招笔试 #
469031次浏览 2960人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7129次浏览 157人参与
# 你觉得通信/硬件有必要实习吗? #
155421次浏览 1065人参与
# 小红书求职进展汇总 #
227003次浏览 1357人参与
# 从哪些方向判断这个offer值不值得去? #
56720次浏览 357人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务