#include <iostream.h> #include <math.h> #define maxno 10000 int step_d,step_s,no;//定义将要行进的步数 void main() { cout<<"请输入数字(1-64):"; cin>>no;//获取实际的塔片数 //初始化
int **p=new int*[3];
p[0]=new int[no+1];
p[1]=new int[no+1];
p[2]=new int[no+1]; p[0][0]=maxno;p[1][0]=maxno;p[2][0]=maxno; for(int count=1;count<=no;count++) { p[0][count]=no-count+1; p[1][count]=0; p[2][count]=0; } //初始化完毕 if(fmod(no,2)){step_s=2;step_d=1;}else {step_s=1;step_d=2;}//判断奇数盘的步数和偶数盘的步数 int from,to; from=0; to=step_s+from; p[0]=&p[0][no]; while(*(p[0]) != *(p[1])) { cout<<"从柱:"<<from+1<<" 到柱: "<<to+1<<endl; *(++p[to])=*(p[from]); *(p[from]--)=0; //以下求得下一步将要From移动的柱子 switch(to) { case 2: if(*(p[0]) < *(p[1]))from=0;else from=1; break; case 1: if(*(p[0]) < *(p[2]))from=0;else from=2; break; case 0: if(*(p[2]) < *(p[1]))from=2;else from=1; break; } //以下一行求得下一步将要移动到的柱子 if(fmod(*(p[from]),2))to=fmod(from+step_s,3);else to=fmod(from+step_d,3); } char c; cin>>c; } 
|