请问这程序将错就错在哪里可以看错了?

这是一段汉诺塔算法的程序,得不到正确的结果,请问各位高手哪有错误,如何改正,谢谢啦
这是一段汉诺塔算法的程序,得不到正确的结果,请问各位高手哪有错误,如何改正,谢谢啦 70
&#include&stdio.h&#include&stdlib.h&#include&iostream&//定义链栈typedef int DataStypedef struct stacknode{&DataS&struct stacknode *}StactNtypedef struct{&StactNode *}
//置空栈void initstack(linkstack *s){&s-&top=NULL;}//判栈空int stactempty(linkstack *s){&return s-&top==NULL;}
//进栈void push(linkstack *s,DataStack n){&StactNode *p=(stacknode*)malloc(sizeof(stacknode));&p-&data=n;&p-&next=s-&&s-&top=p;}
DataStack pop(linkstack *s){&StactNode *p;&p=s-&&if(stactempty(s))&{&&puts("栈空");&&exit(0);&}&else&{&&&& return p-&& s-&top=p-&&}&free(p);}
//取栈顶元素DataStack stacktop(linkstack *s){&if(stactempty(s))&{&&puts("栈空");&&exit(0);&}&else&{&&return s-&top-&&}}
&void move(linkstack *u,linkstack *t)//u中的栈顶元素出栈进入栈t中
&{& DataStack& e=pop(u);&push(t,e);&}
&void hanoi(int n ,linkstack*a,linkstack*b,linkstack*c)//汉诺塔的递归算法&{ if(n==1)&&&&&&&&&&&&& move(a,b);&&& else
&{& hanoi(n-1,a,c,b);& move(a,b);& hanoi(n-1,c,b,a);&}&}void main(){int i,v[3];linkstack *q=(linkstack*)malloc(sizeof(linkstack));linkstack *r=(linkstack*)malloc(sizeof(linkstack));linkstack *p=(linkstack*)malloc(sizeof(linkstack));for(i=3;i&=1;i--)//初始:3个整数:3,2,1(栈顶)入栈q,栈r和栈p为空{&push(q,i);}hanoi(3,q,r,p);//之后:栈q和栈p为空,栈r中数据为1(栈顶),2,3for(int h=0;h&=2;h++)//栈r中的元素依次出栈,打印结果,只要r中的数据依次为1,2,3则正确{v[h]=pop(r);cout&&v[h]&&}}
我感觉你对汉诺塔算法的要求理解 有误,算法只是要你把具体过程表示出来就可以了,内部表现形式对你来说太难了,#include &fstream&
#include &iostream&

ofstream fout(&out.txt&);
void Move(int n,char x,char y)
{

fout&&&把&&&n&&&号从&&&x&&&挪动到&&&y&&
}
void Hannoi(int n,char a,char b,char c)
{

if(n==1)

Move(1,a,c);

else

{

Hannoi(n-1,a,c,b);

Move(n,a,c);

Hannoi(n-1,b,a,c);

}
}
int main()
{

fout&&&以下是7层汉诺塔的解法:&&&

Hannoi(7,&a&,&b&,&c&);

fout.close();

cout&&&输出完毕!&&&

return 0;
}就好了
其他回答 (1)
&汉诺塔算法的非递归实现C++源代码#include &iostream&
//圆盘的个数最多为64
const int MAX = 64;
//用来表示每根柱子的信息
struct st{
int s[MAX]; //柱子上的圆盘存储情况
//栈顶,用来最上面的圆盘
//柱子的名字,可以是A,B,C中的一个
int Top()//取栈顶元素
return s[top];
int Pop()//出栈
return s[top--];
void Push(int x)//入栈
s[++top] =
long Pow(int x, int y); //计算x^y
void Creat(st ta[], int n); //给结构数组设置初值
void Hannuota(st ta[], long max); //移动汉诺塔的主要函数
int main(void)
cin && //输入圆盘的个数
st ta[3]; //三根柱子的信息用结构数组存储
Creat(ta, n); //给结构数组设置初值
long max = Pow(2, n) - 1;//动的次数应等于2^n - 1
Hannuota(ta, max);//移动汉诺塔的主要函数
system("pause");
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 -
//柱子B,C上开始没有没有圆盘
ta[1].top = ta[2].top = 0;
for (int i=0; i&n; i++)
ta[1].s[i] = ta[2].s[i] = 0;
//若n为偶数,按顺时针方向依次摆放 A B C
if (n%2 == 0)
ta[1].name = 'B';
ta[2].name = 'C';
//若n为奇数,按顺时针方向依次摆放 A C B
ta[1].name = 'C';
ta[2].name = 'B';
long Pow(int x, int y)
long sum = 1;
for (int i=0; i&y; i++)
void Hannuota(st ta[], long max)
int k = 0; //累计移动的次数
int i = 0;
while (k & max)
//按顺时针方向把圆盘1从现在的柱子移动到下一根柱子
ch = ta[i%3].Pop();
ta[(i+1)%3].Push(ch);
cout && ++k && ": " &&
"Move disk " && ch && " from " && ta[i%3].name &&
" to " && ta[(i+1)%3].name &&
//把另外两根柱子上可以移动的圆盘移动到新的柱子上
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())
ta[(i-1)%3].Pop();
ta[(i+1)%3].Push(ch);
cout && ++k && ": " && "Move disk "
&& ch && " from " && ta[(i-1)%3].name
&& " to " && ta[(i+1)%3].name &&
ta[(i+1)%3].Pop();
ta[(i-1)%3].Push(ch);
cout && ++k && ": " && "Move disk "
&& ch && " from " && ta[(i+1)%3].name
&& " to " && ta[(i-1)%3].name &&
相关知识等待您来回答
编程领域专家凯立德导航应用程序NaviOne.exe出现严重错误必须被关闭!请问这是怎么个情况?应该怎么处理啊?哪位大侠告诉我
凯立德导航应用程序NaviOne.exe出现严重错误必须被关闭!请问这是怎么个情况?应该怎么处理啊?哪位大侠告诉我
不区分大小写匿名
从新下载一个凯立德导航,然后把原来里面的凯立德删去,拔出电脑,打开导航管理, 点添加导航,把原来的凯立德导航图标删了,再把新下载的导航复制进去,然后拔出电脑,打开导航管理, 点添加导航,再把凯立德添加进去,开机就ok了,我也出现过这种情况,就是这么搞的。希望能帮你
在哪里下载啊? 谢谢
我的 以上 都不可以!!!而是捅一下RST复位键
再开机就OK!!!希望对你有用!!!
相关知识等待您来回答
软件领域专家请问下面的c程序哪里错了-中国学网-中国IT综合门户网站
> 请问下面的c程序哪里错了
请问下面的c程序哪里错了
转载 编辑:李强
为了帮助网友解决“请问下面的c程序哪里错了”相关的问题,中国学网通过互联网对“请问下面的c程序哪里错了”相关的解决方案进行了整理,用户详细问题包括:50 9:price=2;case3.5问题;kind&;}money+=price*number:price=4; #include&%d&case4.87;kind++){printf(&quot,kind);for(kind=1;double money=0;请输入上周销售%d号产品的数量&1) .50;销售总额为%.3;=5.98,产品号分别为1;switch(kind){case1.87要求输入对应的产品号和销售数量:price=4,number.98 4.49 6;}printf(&quot.2,money):price=9.4:price=6.49;}while(number&;。2f元&#92;case5;}输出总是为0;n&quot,单价分别为2;int main(void){stdlib.98 4;do{scanf(&return 0;case2,price,计算总的销售额#include&lt.h&gt.98.h&pause&quot:商店出售5种商品;);system(&quot,怎么回事,&number),具体解决方案如下:解决方案1:<解决方案2:多谢啦~通过对数据库的索引,我们还为您准备了:所以~~还是原来的a 要想得到那个等式z=x * x + y * 的结果 应在该语句下加一条 但是~这样一来,a就没有作用到了。 不知道你的程序是要实现什么的===========================================跟单信用证操作流程 信用证的流程 跟单信用证操作的流程简述如下: 1.买卖双方在... 但自由议付信用证除外。 像提交单据的期限一样,信用证的到期地点也会影响受益人...=========================================== b,我考过,确定===========================================C是正确的!C语言本身没有输入输出语句,输入输出都是通过函数实现的!===========================================系统加载的程序或者系统正在运行的程序之前有冲突,尤其是部分杀毒软件监控程序 4... system32&#92;*.dll) do regsvr32.exe &#47;s %1回车。 完成后,在输入下面的 for %i ...===========================================首先测试输出的窗体你去窗口上面看看或者是视图以及调试那里看看,其次Win8对软件的版权和真实性比较严格,GNU C和Pelles C的编译器是没办法下载的,但你可以下载带有该...===========================================如果还弹出来再看下面: 3、开始→运行→regedit→ 在下面的位置删除相应键值: HKE... Windows&#92;CurrentVersion&#92;Run&#92;"中,右边窗口找到残留的程序名删除。或...===========================================Visual C++ / Win32 / Win32 Console Application 然后在新建项目对话框下边的 Name 输... Properties / C/C++ / Advanced将属性对话框右边的 Compile As 改为 Compile as C Co...===========================================系统加载的程序或者系统正在运行的程序之前有冲突,尤其是部分杀毒软件监控程序 4... %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。 完成后,在输入下面的 fo...===========================================int n='c'; switch(n++) { default: printf("error"); case'a': case'A': case'b': case'B': printf ("good"); case'a': case'A': printf ("pass"); 错误,重复case标签! case'b': cas...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助请问这段java小程序哪里有错?_百度知道
请问这段java小程序哪里有错?
println(err).println(str);
while(true){
int bytes = System.out, bytes);
System.in.toString().read(
catch(Exception e){
String err=e, 0,0.
String str = new String(buffer,2056);
}}谢谢.*.class A {
public static void main(String[] args) {
byte buffer[]=new byte[2056]
提问者采纳
死循环一个哦可以编译,不过运行的时候需要带参数,也就是键盘输入的数据打印不出来,造成假死
java.util.S public class
flowers {public static void main(String[] args); //这里多了一个分号,应换成{ Scanner scan=new Scanner(System.in); year=scan.nextInt().charAt(0);//不用charAt() boolean b=((year%4==0&&year%100!=0)||(year%400==0)); System.out.println(b); //main函数结束,应该有个} }
其他类似问题
49人觉得有用
您可能关注的推广回答者:
按默认排序
其他2条回答
&#47,所以条不出while循环,但是这是一个死循环了while(true)/这里循环条件永远为真没有错
Java 编程初步 傻瓜书
数据结与算法 Java语言版 JSF JavaServer Faces in Action Manning Wrox Professional Java JDK 6 Edition Java 2 宝典 侯捷java编程思想 PDF中文版 Learning Java (第三版) Beginning Java Programming for Dummies 第二版 Java 2 核心编程 Java How to Program (第六版) Java All-In-One案头参考傻瓜书 (第二版) 21天自学 Java 6 (2007年5月更新出版) PDF Java咖啡馆 Thinking in Java(第四版) 深入学习JFC SWING - Java基础类组件集 J2EE全实例教程 Java信息系统设计与开发实例(第二版) Java优化编程 Java信息系统设计与开发实例(第二版) Tricks of the Java Programming Wrox Professional Java Native Interfaces with SWT JFace Java Swing 第二版 PDF文字版 O&#39;Relliy出版 O&#39;Reilly - Java Database Programming with JDBC JDBC与Java数据库程序设计Learning JQurey (2007年7月最新出版) J2EE设计开发编程指南 Java Web Services简明教程 O&#39;Reilly Java and XML (第二版PDF) O&#39;Reilly Java and XML (第三版PDF)Java技术XML高级编程 Expert One-on-One J2EE Design and Development
Expert One-on-One J2EE Development without EJB
JBoss - A Developer&#39;s Notebook The Java Programming Language (第四版) Spring in Action (第二版) Professional Java Development with the Spring Framework Core Java Server Faces 第二版 精通Enterprise JavaBeans Enterprise JavaBeans EJB 第四版 J2EE应用与BEA WebLogic Server (第二版PDF) O&#39;Reilly Java Web Services Ant权威指南 Ajax和Java框架高级编程 Java Web Services简明教程
Cross-Platform Web Services Using C# and Java
O&#39;Reilly Ajax on Java O&#39;Reilly Java and XSLT O&#39;Reilly Java and XML Binding O&#39;Reilly Java and SOAP Design Patterns Java Companion J2EE Java黑客大曝光 开发安全的Java应用程序 J2ME API 速查手册 精通J2ME无线编程 J2ME开发大全 Java网页开发的艺术 Java编程高手 Java 5.0 Tiger程序高手秘笈 Java2网络协议技术内幕(附源码) Using Enterprise JavaBeans 2 Java技术实用教程 企业级Java安全性(构建安全的J2EE应用) Java语言集成开发环境Eclipse中文教程
NetBeans IDE 5.5 企业版高级开发教程
Using Enterprise JavaBeans 2 Borland JBuilder Developer&#39;s Guide Eclipse精要与高级开发技术 Java 6 3D游戏开发
小程序的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言,请问下面的语法错误出现在哪儿?。还有请问我这段程序除了语法外,还有错误吗。_百度知道
提问者采纳
/=9..; 去掉int另外如果输入的n&&#47int max=a[0][0]
c++的变量声明真的只能放在一个函数的开头吗?不能是中间吗?
当然不是,你这里出错是因为max和min重复定义了,所以你有2个修改的办法:int m, i...min, // 这里去掉min和max的定义int max=a[0][0]... // 这里去掉int,告诉编译器这里不是声明变量,只是赋值
恩恩。谢了。变量声明放在函数的中间的时候
系统是不是会先按顺序执行上面的语句,然后按顺序到中间的变量声明,然后再往下走啊?
提问者评价
其他类似问题
c语言的相关知识
按默认排序
其他1条回答
你不是已经定义了一个max min了么,把定义全放开头吧
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 我错在哪里 的文章

 

随机推荐