時間限制:3000 ms | 記憶體限制:65535 kb
難度:3
描述在印度,有這麼乙個古老的傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。
現在我們把三根針編號為1,2,3。
所有的金片在初始時都在1號針上,現在給你的任務是判斷一系列的指令過程中,是否會出現非法的指令。
而非法指令有以下兩種情況:
1、某個針上已經沒有金片了,但是指令依然要求從該處移動金片到其它針上。
2、把乙個大的金片移動到了小的金片上。
輸入第一行輸入乙個整數n表示測試資料的組數(n<10)
每組測試資料的第一行有兩個整數p,q(1
輸出如果存在非法指令,請輸出illegal
不存在非法指令則輸出legal
樣例輸入
3樣例輸出2 11 2
3 31 2
1 33 2
2 12 1
legal#includeillegal
illegal
#include
#include
using namespace std;
int main()
{int tim,p,q,k1,k2,flag=1;
cout<<"請輸入遊戲次數"<>tim;
while(tim--)
{cout<<"請輸入金片的 層數 和遊戲的 步數 "<>p>>q;
stack> s[4];
for(int i=p;i>0;i--) s[1].push(i); //進棧,編號大的對應**子
cout<<"第一根柱子的最上面的一片的編號 :"<0;i--)
{cout<<"請輸入移動次數 "<>k1>>k2; //將k1上的金片移動到k2上
if(s[k1].empty())
{cout<<"錯誤1"{cout<<"錯誤2"<
棧的應用 漢諾塔
2014年4月23日 漢諾塔 include brief 把第n個盤子從位置a移動到位置b param n 盤子的編號 param a 源位置 param b 目標位置 return void move int n,char a,char b brief 漢諾塔 param n 盤子的個數 para...
漢諾塔的實現
漢諾塔是大學遇見的第乙個使用遞迴的問題。這個問題的解決方法充分展示了遞迴給程式帶來的遍歷 如果不使用遞迴的話,那麼就需要細緻的分析。這裡不談非遞迴的解法。漢諾塔問題介紹 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時...
漢諾塔c 實現
用c 實現了漢諾塔,使用了遞迴,使用了上一次實現的堆疊這個資料結構來實現的漢諾塔,下面是 stack.h main.cpp stackdemo created by xin wang on 4 15 15.include class outofbounds 刪除定義的陣列 bool isempty ...