1765:Hanoi问题
Description
算法训练 Hanoi问题
时间限制:1.0s 内存限制: 512MB
问题 描述
如果将课本上的Hanoi塔问题稍作修改:仍然是给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次?
例如N=5,M=2时,可以将最小的2只盘子,中间的2只盘子以及最大的盘子分别看做一个整体,这样可以转变为N=3,M=1的情况,共需要移动7次。
输入格式
仅输出一个数,表示需要移动的最少次数
样例输入
5 2
样例输出
7
Source
#include<iostream>
using namespace std;
int main()
{
int a[100];
a[1]=1;
for(int i=2;i<=8;i++)
a[i]=2*(a[i-1])+1;
int N,M;
cin>>N>>M;
int temp=N/M+N%M;
cout<<a[temp]<<endl;
return 0;
}