天天看点

1765:Hanoi问题

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;
}
           

继续阅读