题意:求n个碟子在三柱汉诺塔上的移动次数。
思路:公式 移动次数=(2^碟子数-1)
注意点:n在1-200范围内,用大数问题处理。
以下为AC代码:
评测状态 | Accepted |
题目 | P1354 Hanoi双塔问题 |
递交时间 | 2014-11-07 12:58:47 |
代码语言 | C++ |
评测机 | 上海红茶馆 |
消耗时间 | 45 ms |
消耗内存 | 560 KiB |
评测时间 | 2014-11-07 12:58:48 |
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
int num[100];
void muti ( int n )
{
int tmp = 0;
for ( int i = 0; i < 100; i ++ )
{
tmp += n * num[i];
num[i] = tmp % 10000;
tmp /= 10000;
}
}
void print ( )
{
int i;
for ( i = 99; i >= 0 && num[i] == 0; i -- );
printf ( "%d", num[i] );
for ( i -= 1; i >= 0; i -- )
{
printf ( "%04d", num[i] );
}
printf ( "\n" );
}
int main()
{
int n;
while ( cin >> n )
{
memset ( num, 0 , sizeof ( num ) );
num[0] = 1;
for ( int i = 0; i < n; i ++ )
{
muti ( 2 );
}
num[0] -= 1;
muti ( 2 );
print ();
}
return 0;
}