问题 P: Hanoi
时间限制: 1.000 Sec 内存限制: 128 MB
提交: 91 解决: 77
[命题人:][下载数据: ?]
提交状态报告
题目描述
对于Hanoi的问题想必都已经很熟悉了,现在有N个盘子,从小到大编号1到N,开始时都在第一根柱子上,现在要全部移动到第三根柱子上,整个过程中只能小盘子放在大盘子上面。现在需要你知道第K步移动的是编号为多少的盘子。
输入
输入一行一个正整数,表示测试组数,组数不超过20。
每组测试数据包含两个正整数n和k,n不超过20,k小于2^n。
输出
对于每个数据输出一行,表示移动的盘子的编号。
样例
输入 复制
1 3 4
输出 复制
3
代码:
#include <bits/stdc++.h>
using namespace std;
int s, n, k, c, g = 1;
void hanoi(int n)
{
if (n == 0)
return;
hanoi(n - 1);
s++;
if (s == k)
{
cout << n << endl;
return;
}
hanoi(n - 1);
}
int main()
{
cin >> c;
while (g <= c)
{
cin >> n >> k;
s = 0;
hanoi(n);
g++;
}
return 0;
}