關於漢諾塔問題的一個疑問

來源:互聯網
上載者:User

本文是一個漢諾塔的非遞迴演算法,但是我疑問的為什麼最大隻能夠輸入31?超過就顯示不能正確執行程式?

#include<iostream>using namespace std;//圓盤的個數最多為64const int MAX=64;//用來表示每根柱子的資訊structst{int s[MAX]; //柱子上的圓盤儲存情況int top;    //棧頂,用來最上面的圓盤char name;  //柱子的名字,可以是A,B,C中的一個int Top()   //取棧頂元素{return s[top];}int Pop()//出棧{return s[top--];}void Push(int x)//入棧{s[++top]=x;}};long Pow(int x,int y);//計算x^yvoid Creat(st ta[],int n);//給結構數組設定初值void Hannuota(st ta[],long max);//移動漢諾塔的主要函數int main(void){int n;cin>>n;//輸入圓盤的個數st ta[3];//三根柱子的資訊用結構數組儲存Creat(ta,n);//給結構數組設定初值long max=Pow(2,n)-1;//動的次數應等於2^n-1Hannuota(ta,max);//移動漢諾塔的主要函數system("pause");return 0;}void Creat(st ta[],int n){ta[0].name='A';ta[0].top=n-1;//把所有的圓盤按從大到小的順序放在柱子A上for(int i=0;i<n;i++)ta[0].s[i]=n-i;//柱子B,C上開始沒有沒有圓盤ta[1].top=ta[2].top=0;for(i=0;i<n;i++)ta[1].s[i]=ta[2].s[i]=0;//若n為偶數,按順時針方向依次擺放ABCif(n%2==0){ta[1].name='B';ta[2].name='C';}else//若n為奇數,按順時針方向依次擺放ACB{ta[1].name='C';ta[2].name='B';}}long Pow(int x,int y){long sum=1;for(int i=0;i<y;i++)sum*=x;return sum;}void Hannuota(st ta[],long max){int k=0;//累計移動的次數int i=0;int ch;while(k<max){//按順時針方向把圓盤1從現在的柱子移動到下一根柱子ch=ta[i%3].Pop();ta[(i+1)%3].Push(ch);cout<<++k<<":"<<"Movedisk"<<ch<<"from"<<ta[i%3].name<<"to"<<ta[(i+1)%3].name<<endl;i++;//把另外兩根柱子上可以移動的圓盤移動到新的柱子上if(k<max){//把非空柱子上的圓盤移動到空柱子上,當兩根柱子都為空白時,移動較小的圓盤if(ta[(i+1)%3].Top()==0||ta[(i-1)%3].Top()>0&&ta[(i+1)%3].Top()>ta[(i-1)%3].Top()){ch=ta[(i-1)%3].Pop();ta[(i+1)%3].Push(ch);cout<<++k<<":"<<"Movedisk"<<ch<<"from"<<ta[(i-1)%3].name<<"to"<<ta[(i+1)%3].name<<endl;}else{ch=ta[(i+1)%3].Pop();ta[(i-1)%3].Push(ch);cout<<++k<<":"<<"Movedisk"<<ch<<"from"<<ta[(i+1)%3].name<<"to"<<ta[(i-1)%3].name<<endl;}}}}

糾結了好久我最先想到的是不是我的系統是三十二位的有影響(想法貌似有點搞笑),但是各種機器上都運行了都不合適。

但是後來想想這隻是程式的一種輸入與輸入不影響程式是否開始執行。現在把代碼貼上來大家看看?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.