专业编程培训机构——完成蜕变以后轻松拿高薪
电话+V:159999-78052 ,欢迎咨询手动输入如何做程序的尾部输出,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]
一、如何在运行一个程序结束后不自动关闭(用freepascal编写的)
在程序尾部打一个readln。
然后他就等待你的输入,就不会消失。
二、汉诺塔问题公式是什么?
汉诺塔问题(又称河内塔问题)是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘;
2.大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
一般取N=64。这样,最少需移动264-1次。即如果一秒钟能移动一块圆盘,仍将需5845.54亿年。目前按照宇宙大爆炸理论的推测,宇宙的年龄仅为137亿年。
在真实玩具中,一般N=8;这将需移动255次。如果N=10,需移动1023次。如果N=15,需移动32767次;这就是说,如果一个人从3岁到99岁,每天移动一块圆盘,他仅能移动15块。如果N=20,需移动1048575次,即超过了一百万次。
先看hanoi(1,one,two,three)的情况。这时直接将one柱上的一个盘子搬到three柱上。注意,这里one柱或three柱到底是A、B还是C并不重要,要记住的是函数第二个参数代表的柱上的一个盘被搬到第四个参数代表的柱上。为方便,将这个动作记为:
one=》three
再看hanoi(2,one,two,three)的情况。考虑到hanoi(1)的情况已经分析过了,可知这时实际上将产生三个动作,分别是:
one=》two
one=》three
two=》three
很显然,这实际上相当于将one柱上的两个盘直接搬到three柱上。
再看hanoi(3,one,two,three)的情况。分析
hanoi(2,one,three,two)
one=》three
hanoi(2,two,one,three)
即:先将one柱上的两个盘搬到two柱上,再将one柱上的一个盘搬到three柱上,最后再将two柱上的两个盘搬到three柱上。这不就等于将one柱上的三个盘直接搬到three柱上吗?
运用归纳法可知,对任意n,
hanoi(n-1,one,three,two)
one=》three
hanoi(n-1,two,one,three)
就是先将one柱上的n-1个盘搬到two柱上,再将one柱上的一个盘搬到three柱上,最后再将two柱上的n-1个盘搬到three柱上。这就是我们所需要的结果!
回答者:wuchenghua121-经理四级12-511:51
汉诺塔
汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请自己运行计算,程序见尾部。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。
后来,这个传说就演变为汉诺塔游戏:
1.有三根杆子A,B,C。A杆上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移到C杆上
经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,汉诺塔问题也是程序设计中的经典递归问题。
补充:汉诺塔的算法实现(c++)
#include<fstream>
#include<iostream>
usingnamespacestd;
ofstreamfout("out.txt");
voidMove(intn,charx,chary)
{
fout<<"把"<<n<<"号从"<<x<<"挪动到"<<y<<endl;
}
voidHannoi(intn,chara,charb,charc)
{
if(n==1)
Move(1,a,c);
else
{
Hannoi(n-1,a,c,b);
Move(n,a,c);
Hannoi(n-1,b,a,c);
}
}
intmain()
{
fout<<"以下是7层汉诺塔的解法:"<<endl;
Hannoi(7,'a','b','c');
fout.close();
cout<<"输出完毕!"<<endl;
return0;
}
C语言精简算法
/*CopyrighterbySS7E*/
#include<stdio.h>/*CopyrighterbySS7E*/
voidhanoi(intn,charA,charB,charC)/*CopyrighterbySS7E*/
{
if(n==1)
{
printf("Movedisk%dfrom%cto%c",n,A,C);
}
else
{
hanoi(n-1,A,C,B);/*CopyrighterbySS7E*/
printf("Movedisk%dfrom%cto%c",n,A,C);
hanoi(n-1,B,A,C);/*CopyrighterbySS7E*/
}
}
main()/*CopyrighterbySS7E*/
{
intn;
printf("请输入数字n以解决n阶汉诺塔问题:");
scanf("%d",n);
hanoi(n,'A','B','C');
}/*CopyrighterbySS7E*/
回答者:Vanquisher_-举人五级12-513:57
parcel::::::::::
programhanoi;
functionhanoi(x:integer):longint;
begin
ifx=1thenhanoi:=1;
ifx=2thenhanoi:=3;
else
begin
hanoi:=2*hanoi(x-1)+1;
end;
end;
begin
read(x){第几个数}
write(hanoi(x));
end.
“$”符号的输入技巧
原创2021-03-1620:45·e小课
“$”符号的输入技巧:
“$”符号是我们做表格会经常用到的,这个符号在EXCEL表格中是绝对引用单元格符号,
手动输入会麻烦些,输入这个符号必须是英文状态下输入,这个键在键盘数字4上,用shift+4就可以得到这个符号。还可以通过下面几种方法得到这个符号:
1、把光标放在单元格地址的后面(也可以放在前面或中间),按一次F4,得到下图结果单元地址在行号和列标前都有一个”$”符号,表示对单元格采用绝对引用,特点是无论公式被复制到了哪个单元格,单元格地址都没有发生变化。
2、按二次F4,得到下图结果:
3、按三次F4,得到下图结果:
“B”的前面添加了”$”符号,表示对列采用绝对引用,行号”1“前面没有加”$”符号,表示对行采用相对引用。
4、按四次F4,得到下图结果:
不含符号叫做相对引用,相对引用可以简单理解为公式与单元格的位置是相对的,相对引用的单元格地址会随公式的移动,公式向哪里移动,单元格地址也向哪里移动。
今天的知识就分享到这里,如果对你有帮助,请记得点个赞哦!
【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板
电话+V:159999-78052
机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。