好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php河内塔问题 河内塔算法

很多站长朋友们都不太清楚php河内塔问题,今天小编就来给大家整理php河内塔问题,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 谁帮我解释一下河内塔程序? 2、 汉诺塔问题? 3、 河内塔问题经常犯的错误 4、 帮我解释一下这段代码(递归),在线等!!!! 5、 河内塔问题怎么解决 6、 河内塔问题的影响因素 谁帮我解释一下河内塔程序?

汉诺塔问题是程序设计中的经典递归问题。 算法思路: 1.如果只有一个金片,则把该金片从源移动到目标棒,结束。 2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒 补充:汉诺塔的算法实现(c++) #include <fstream> #include <iostream> using namespace std; ofstream fout("out.txt"); void Move(int n,char x,char y) { fout<<"把"<<n<<"号从"<<x<<"挪动到"<<y<<endl; } 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层汉诺塔的解法:"<<endl; Hannoi(7,'a','b','c'); fout.close(); cout<<"输出完毕!"<<endl; return 0; } C语言精简算法 /* Copyrighter by SS7E */ #include<stdio.h> /* Copyrighter by SS7E */ void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */ { if(n==1) { printf("Move disk %d from %c to %c\n",n,A,C); } else { hanoi(n-1,A,C,B); /* Copyrighter by SS7E */ printf("Move disk %d from %c to %c\n",n,A,C); hanoi(n-1,B,A,C); /* Copyrighter by SS7E */ } } main() /* Copyrighter by SS7E */ { int n; printf("请输入数字n以解决n阶汉诺塔问题:\n"); scanf("%d",n); hanoi(n,'A','B','C'); }/* Copyrighter by SS7E */ PHP算法: <?php function hanoi($n,$x,$y,$z){ if($n==1){ move($x,1,$z); }else{ hanoi($n-1,$x,$z,$y); move($x,$n,$z); hanoi($n-1,$y,$x,$z); } } function move($x,$n,$z){ echo 'move disk '.$n.' from '.$x.' to '.$z.'<br>'; } hanoi(10,'x','y','z'); ?> JAVA算法: public class Haniojava { public static void main(String args[]) { byte n=2; char a='A',b='B',c='C'; hanio(n,a,b,c); } public static void hanio(byte n,char a,char b,char c) { if(n==1) System.out.println("move "+a+" to "+b); else { hanio((byte)(n-1),a,c,b); System.out.println("move "+a+" to "+b); hanio((byte)(n-1),c,b,a); } } }

汉诺塔问题?

汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着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

此外,汉诺塔问题也是程序设计中的经典递归问题。

算法思路:

1.如果只有一个金片,则把该金片从源移动到目标棒,结束。

2.如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒

(非专业人士可以忽略以下内容)

补充:汉诺塔的算法实现(c++)

#include

#include

using namespace std;

ofstream fout("out.txt");

void Move(int n,char x,char y)

{

fout<<"把"<<n<<"号从"<<x<<"挪动到"<<y<<endl;

}

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层汉诺塔的解法:"<<endl;

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

fout.close();

cout<<"输出完毕!"<<endl;

return 0;

}

C语言精简算法

/* Copyrighter by SS7E */

#include /* Copyrighter by SS7E */

void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */

{

if(n==1)

{

printf("Move disk %d from %c to %c\n",n,A,C);

}

else

{

hanoi(n-1,A,C,B); /* Copyrighter by SS7E */

printf("Move disk %d from %c to %c\n",n,A,C);

hanoi(n-1,B,A,C); /* Copyrighter by SS7E */

}

}

main() /* Copyrighter by SS7E */

{

int n;

printf("请输入数字n以解决n阶汉诺塔问题:\n");

scanf("%d",n);

hanoi(n,'A','B','C');

}/* Copyrighter by SS7E */

PHP算法:

<?php

function hanoi($n,$x,$y,$z){

if($n==1){

move($x,1,$z);

}else{

hanoi($n-1,$x,$z,$y);

move($x,$n,$z);

hanoi($n-1,$y,$x,$z);

}

}

function move($x,$n,$z){

echo 'move disk '.$n.' from '.$x.' to '.$z.'

';

}

hanoi(10,'x','y','z');

?>

JAVA算法:

public class Haniojava

{

public static void main(String args[])

{

byte n=2;

char a='A',b='B',c='C';

hanio(n,a,b,c);

}

public static void hanio(byte n,char a,char b,char c)

{

if(n==1)

System.out.println("move "+a+" to "+b);

else

{

hanio((byte)(n-1),a,c,b);

System.out.println("move "+a+" to "+b);

hanio((byte)(n-1),c,b,a);

}

}

}

#include

void move(char ch1, char cstrong) {

cout<<ch1<"<<cstrong<<' ';

}

void hanoi(int n, char a, char b, char c) {

if (n==1)

move (a,c);

else {

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

move (a,c);

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

}

}

void main() {

int m;

cout<<"Enter the number of disk to move:\n";

cin>>m;

cout<<"The step to moving "<<m<<" disk:\n";

hanoi (m,'A','B','C');

cin>>m;

}

用不了这么复杂

,设A上有n个盘子。

如果n=1,则将圆盘从A直接移动到C。

如果n=2,则:

1.将A上的n-1(等于1)个圆盘移到B上;

2.再将A上的一个圆盘移到C上;

3.最后将B上的n-1(等于1)个圆盘移到C上。

如果n=3,则:

A. 将A上的n-1(等于2,令其为n`)个圆盘移到B(借助于C),步骤如下:

(1)将A上的n`-1(等于1)个圆盘移到C上。

(2)将A上的一个圆盘移到B。

(3)将C上的n`-1(等于1)个圆盘移到B。

B. 将A上的一个圆盘移到C。

C. 将B上的n-1(等于2,令其为n`)个圆盘移到C(借助A),步骤如下:

(1)将B上的n`-1(等于1)个圆盘移到A。

(2)将B上的一个盘子移到C。

(3)将A上的n`-1(等于1)个圆盘移到C。

到此,完成了三个圆盘的移动过程。

从上面分析可以看出,当n大于等于2时,移动的过程可分解为三个步骤:

第一步 把A上的n-1个圆盘移到B上;

第二步 把A上的一个圆盘移到C上;

第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。

当n=3时,第一步和第三步又分解为类同的三步,即把n`-1个圆盘从一个针移到另一个针上,这里的n`=n-1。 显然这是一个递归过程,据此算法可编程如下:

move(int n,int x,int y,int z)

{

if(n==1)

printf("%c-->%c\n",x,z);

else

{

move(n-1,x,z,y);

printf("%c-->%c\n",x,z);

move(n-1,y,x,z);

}

}

main()

{

int h;

printf("\ninput number:\n");

scanf("%d",h);

printf("the step to moving %2d diskes:\n",h);

move(h,'a','b','c');

}

河内塔问题经常犯的错误

河内塔问题经常犯的错误是人们的认知错觉导致的。河内塔问题是问题解决研究中的经典实验。给出柱子1、2、3,在柱1上,有一系列圆盘,自上而下圆盘的大小是递增的,构成金字塔状。要求被试将柱1的所有圆盘移到柱3上去,且最终在柱3上仍构成金字塔排列,规则是每次只能移动一个圆盘,且大盘不可压在小盘之上等来测试人们的认知能力。

帮我解释一下这段代码(递归),在线等!!!!

因为num=2,所以执行else里面的语句hano4(num-1, first, third, second),在这方法里面num-1变为1,执行System.out.println(first + "-->" + third)输出A-->B;完成后跳出,num还是等于2,继续执行System.out.println(first + "-->" + third)输出A-->C,继续执行遇到hano4(num-1, second, first, third)时,num-1为1,再输出B-->C,程序结束.最后执行的System.out.println(first + "-->" + third)不是在else里面,而是if (num == 1) {

System.out.println(first + "-->" + third);

}里面的println(first + "-->" + third)

河内塔问题怎么解决

问题:

首先去掉原来的神话色彩:神庙、僧侣和世界末日,来到问题的数学本质。有A、B、C三根柱子。A上堆放了n个盘子,每个盘子都比它下面的盘子小一些。现在要把盘子全部搬到C上去,条件是每次只能搬动一个盘子,而且任何时候都不能放在比它小的盘子上面(显然,必须用到B作为中转)。怎么搬动这些盘子呢?

解决:

玩一下这个游戏,很快就会发现,想把n个盘子搬到C,必须先把上面的n-1个盘子搬到B,然后把第n个盘子搬到C,最后再把n-1个盘子搬过来。整个过程是这样的:

1,把上面的n-1个盘子从A搬到B,以C作为中转;

2,把第n个盘子从A搬到C;

3,把n-1个盘子从B搬到C,以A作为中转。

也就是说,要解决n个盘子的问题,先要解决n-1个盘子的问题。而这个问题与前一个是类似的,可以用相同的办法解决。最终,我们会来到只有一个盘子的情况,很简单,直接把盘子从A搬到C即可。通过以上分析可以写出:

void hanoi (int n, char src, char mid, char dst)

{

if (n == 1)

cout << " move " << src << " to " << dst << endl;

else

{

hanoi (n-1, src, dst, mid);

cout << "move " << src << " to " << dst << endl;

hanoi (n-1, mid, src, dst);

}

}

河内塔问题的影响因素

思维方式。河内塔问题是源于印度一个古老传说的益智玩具,主要的影响因素是各种不同的被试在实验时所采取的思维方式。河内塔问题是现代认知心理学用于研究人的问题解决过程的心理特点的一个实验,要求探索从初始状态到目标状态的通路,最终解决问题,达到目标状态。被试者一边思考,一边大声报告出思考的内容。主试根据被试的口头报告,分析其思维活动过程。

关于php河内塔问题的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php河内塔问题 河内塔算法的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did254976
更新时间:2023-09-26   阅读:49次

上一篇: redis缓存类php php redis页面缓存

下一篇:php事务的隔离级别 php事务处理

相关资讯

最新资料更新

  • 1.php数据抓取实例 php采集数据
  • 2.php上传源码教程 php上传下载源码
  • 3.zblogphp分类 zblog asp
  • 4.腾讯php招聘 招聘 腾讯
  • 5.php赋值后改变 php变量赋值
  • 6.php中table行宽 php网页表格
  • 7.字符串对齐方法php php字符串赋值
  • 8.php版本怎么更新 php版本升级
  • 9.php英国时区代码 英国时区缩写
  • 10.php读取数据库字段值 php读取sql
  • 11.kohanaphp版本 koo版
  • 12.php比较数组差集 php比较多个数组中是否有重复值
  • 13.php旋转图片保存 php转jpg
  • 14.php正则获取图片 php使用正则表达式
  • 15.php上传图片木马 php图片上传代码
  • 16.php加密解密 php数据加密解密
  • 17.php输入日期表单 php输出日历表
  • 18.php图片打不开 php打不开文件
  • 19.php配置外网访问 phpstudy外网映射
  • 20.php网络通信 php通信协议

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]