问题描述:如果将课本上的 Hanoi 塔问题稍做修改:仍然是给定 N 只盘子,3 根柱子,但是允许每次
最多移动相邻的 M 只盘子(当然移动盘子的数目也可以小于 M),最少需要多少次?
例如 N=5,M=2 时,可以分别将最小的 2 个盘子、中间的 2 个盘子以及最大的一个盘子分别看
作一个整体,这样可以转变为 N=3,M=1 的情况,共需要移动 7 次。
输入格式:输入数据仅有一行,包括两个数 N 和 M(0<=M<=N<=8)
输出格式:仅输出一个数,表示需要移动的最少次数
样例输入
5 2
样例输出
最多移动相邻的 M 只盘子(当然移动盘子的数目也可以小于 M),最少需要多少次?
例如 N=5,M=2 时,可以分别将最小的 2 个盘子、中间的 2 个盘子以及最大的一个盘子分别看
作一个整体,这样可以转变为 N=3,M=1 的情况,共需要移动 7 次。
输入格式:输入数据仅有一行,包括两个数 N 和 M(0<=M<=N<=8)
输出格式:仅输出一个数,表示需要移动的最少次数
样例输入
5 2
样例输出
7
//*************************Hanoi问题
#include <iostream>
#include <stack>
#include <math.h>
using namespace std;
int hanoi(int N)
{
int sum=0;
if(N==1)
sum=sum+1;
else
{
sum=sum+1+hanoi(N-1);
sum=sum+hanoi(N-1);
}
return sum;
}
int main()
{
int N,M;
cin >> N >> M;
if(N>=M&&M>=0&&N<=8)
{
if(N%M==0)
N=N/M;
else
N=N/M+1;
int count=hanoi(N);
cout << count;
}
return 0;
}