北京网站开发网站开发公司,深圳公共资源交易平台,制作一个网站的费用是多少钱,官方网站建设与维护好处文章目录1. 问题分析2. 面试题1. 问题分析 游戏规则#xff1a;一次只能挪一片#xff1b;小的只能在大的上面#xff1b;把所有的从A柱挪到C柱。 递推公式#xff1a;
上部 n - 1 个 A 到 B#xff1b;最底下 1 个 A 到 C #xff1b;上部 n - 1 个 B 到 C#xff1b;…
文章目录1. 问题分析2. 面试题1. 问题分析 游戏规则一次只能挪一片小的只能在大的上面把所有的从A柱挪到C柱。 递推公式
上部 n - 1 个 A 到 B最底下 1 个 A 到 C 上部 n - 1 个 B 到 C
终止条件 n 1 时A 到 C
/*** description: 汉诺塔递归问题* author: michael ming* date: 2019/4/7 20:10* modified by:*/
#include iostream
using namespace std;
void hanoi(size_t n, string startP, string middleP, string destP, size_t counts)
{if(n 1){cout startP --- destP endl;counts;return;}else{hanoi(n-1, startP, destP, middleP, counts); //n-1个从开始--中间cout startP --- destP endl; //最底下那个开始--目的地counts;hanoi(n-1, middleP, startP, destP, counts); //n-1个从中间--目的地}
}
int main()
{cout 请输入汉诺塔层数;size_t n, steps 0; cin n;hanoi(n,a,b,c,steps);cout 共走了 steps 步。 endl;return 0;
}2. 面试题
《程序员面试金典》面试题 08.06. 汉诺塔问题
题目
在经典汉诺塔问题中有 3 根柱子及 N 个不同大小的穿孔圆盘盘子可以滑入任意一根柱子。一开始所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动一个盘子; (2) 盘子只能从柱子顶端滑出移到下一根柱子; (3) 盘子只能叠在比它大的盘子上。
请编写程序用栈将所有盘子从第一根柱子移到最后一根柱子。
你需要原地修改栈。
示例1:输入A [2, 1, 0], B [], C []输出C [2, 1, 0]
示例2:输入A [1, 0], B [], C []输出C [1, 0]来源力扣LeetCode 链接https://leetcode-cn.com/problems/hanota-lcci 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
解题
class Solution {
public:void hanota(vectorint A, vectorint B, vectorint C) {h(A,B,C,A.size());}void h(vectorint A, vectorint B, vectorint C, int n){if(n 1){C.push_back(A.back());A.pop_back();return;}h(A,C,B,n-1);C.push_back(A.back());A.pop_back();h(B,A,C,n-1);}
};