關於漢諾塔的一點理解
阿新 • • 發佈:2018-12-31
以NEFU 200 為例
題意:
思路:
利用遞迴的思想解決很好懂
遞迴程式碼:
過程程式碼:
#include <iostream> using namespace std; long long steps,i=0; int move(int x) { i=!i; steps+=2; if(i) { cout<<"move 1 from A to B"<<endl; cout<<"move 1 from B to C"<<endl; } else { cout<<"move 1 from C to B"<<endl; cout<<"move 1 from B to A"<<endl; } } int mission(int x,char a,char b,char c) { if(x==1) move(1); else { mission(x-1,a,b,c); steps++; cout<<"move "<<x<<" from "<<a<<" to "<<b<<endl; mission(x-1,c,b,a); steps++; cout<<"move "<<x<<" from "<<b<<" to "<<c<<endl; mission(x-1,a,b,c); } } int main() { int n; while(cin>>n) { steps=0; mission(n,'A','B','C'); cout<<"Total steps are "<<steps<<endl; } }
計步程式碼:
#include <iostream>
using namespace std;
int main()
{
int n;
long long sum;
while(cin>>n)
{
sum=2;
for(int i=1;i<n;i++)
sum=sum*3+2;
cout<<sum<<endl;
}
}