用C语言代码来编写含汉诺塔问题,利用堆栈来实现.求代码 脚本语言和编程语言的区别是什么?

\u7f16\u7a0b\u8bed\u8a00\u662f\u4ec0\u4e48\uff1f\u600e\u4e48\u5b66\u7f16\u7a0b\u8bed\u8a00\uff1f

\u770b\u4f60\u600e\u4e48\u5b66\uff01
\u5982\u679c\u81ea\u5b66\uff0c\u53ea\u80fd\u517b\u6210\u597d\u7684\u5b66\u4e60\u4e60\u60ef\u6162\u6162\u5b66\uff0c\u65e5\u79ef\u6708\u7d2f\uff0c\u7ec8\u80fd\u5b66\u6709\u6240\u6210\u7684\uff01\u4e0d\u8fc7\u81ea\u5236\u529b\u4e0d\u597d\u7684\u4eba\u4e0d\u5efa\u8bae\u81ea\u5b66\u3002
\u5982\u679c\u8981\u4e0a\u57f9\u8bad\u673a\u6784\u5b66\uff0c\u5efa\u8bae\uff1a
\u8bfe\u524d\u9884\u4e60
\u5bf9\u4e8e\u521d\u5b66\u8005\u6765\u8bf4\u5c24\u5176\u662f\u96f6\u57fa\u7840\u7684\u540c\u5b66\uff0c\u65e2\u7136\u5df2\u7ecf\u6bd4\u90a3\u4e9b\u6709\u57fa\u7840\u7684\u540c\u5b66\u5dee\u4e86\u4e00\u622a\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48\u4e0d\u66f4\u52a0\u7684\u52aa\u529b\u53bb\u5b66\u5462?\u8bfe\u524d\u90fd\u4f1a\u6709\u8bfe\u4ef6\u6216\u8005\u4e66\u7c4d\u63d0\u524d\u7ed9\u5230\u540c\u5b66\uff0c\u53ef\u4ee5\u81ea\u5df1\u5229\u7528\u8bfe\u4f59\u65f6\u95f4\u9884\u4e60\u4e00\u4e0b\uff0c\u5728\u9884\u4e60\u7684\u8fc7\u7a0b\u4e2d\u80af\u5b9a\u8fd8\u4f1a\u6709\u81ea\u5df1\u89e3\u51b3\u4e0d\u4e86\u7684\u95ee\u9898\uff0c\u5148\u8bb0\u5f55\u4e0b\u6765\u8bfe\u4e0a\u89e3\u51b3\u5c31\u597d\u3002
2.\u8bfe\u4e0a\u8ba4\u771f\u542c\u8bfe
\u5728\u4e0a\u8bfe\u7684\u65f6\u5019\u8bb2\u5e08\u80af\u5b9a\u4e0d\u53ef\u80fd\u7167\u987e\u5230\u6240\u6709\u7684\u540c\u5b66\uff0c\u4f46\u662f\u5728\u8bb2\u8bfe\u7684\u65f6\u5019\u6bcf\u8bb2\u5b8c\u4e00\u4e2a\u77e5\u8bc6\u70b9\u80af\u5b9a\u4f1a\u95ee\u5230\u4e00\u4e2a\u95ee\u9898\u201c\u90fd\u542c\u61c2\u4e86\u5417?\u201d\uff0c\u60f3\u4e00\u4e0b\u662f\u4e0d\u662f\u4f60\u7ecf\u5386\u8fc7\u7684\u6240\u6709\u8001\u5e08\u90fd\u6709\u8fd9\u4e2a\u4e60\u60ef?\u8fd9\u4e2a\u65f6\u5019\u5982\u679c\u4f60\u6709\u95ee\u9898\u6216\u8005\u6ca1\u542c\u61c2\u4e00\u5b9a\u8981\u53ca\u65f6\u53bb\u95ee\uff0c\u5343\u4e07\u4e0d\u8981\u4e0d\u61c2\u88c5\u61c2\uff0c\u5426\u5219\u540e\u9762\u4f60\u5c31\u4f1a\u53d1\u73b0\u95ee\u9898\u8d8a\u6765\u8d8a\u591a\u3002
3.\u8bfe\u4e0b\u9879\u76ee\u590d\u4e60
\u8bfe\u4e0a\u8bb2\u8fc7\u7684\u4e1c\u897f\u4e0d\u80fd\u5149\u770b\u4f1a\u5c31\u591f\u4e86\uff0c\u4e00\u5b9a\u8981\u81ea\u5df1\u4eb2\u81ea\u4e0a\u624b\u53bb\u5b9e\u64cd\u4e00\u4e0b\u770b\u770b\uff0c\u53ea\u6709\u81ea\u5df1\u505a\u7684\u65f6\u5019\u624d\u77e5\u9053\u5230\u5e95\u5b66\u5230\u4ec0\u4e48\u7a0b\u5ea6\uff0c\u8fd8\u6709\u54ea\u91cc\u6ca1\u6709\u638c\u63e1\u3002
4.\u8bb0\u7b14\u8bb0
\u597d\u8bb0\u6027\u4e0d\u5982\u70c2\u7b14\u5934\uff0c\u5f53\u4f60\u9047\u5230\u89e3\u51b3\u4e0d\u4e86\u7684\u95ee\u9898\uff0c\u81ea\u5df1\u53ef\u4ee5\u627e\u4e00\u4e2a\u7b14\u8bb0\u672c\u8bb0\u5f55\u4e0b\u6765\uff0c\u8bfe\u4e0a\u8001\u5e08\u8bb2\u7684\u4e1c\u897f\u611f\u89c9\u4e0d\u662f\u5f88\u660e\u767d\u4e5f\u8981\u8bb0\u4e0b\u6765\uff0c\u6ca1\u4e8b\u7ffb\u770b\u4e00\u4e0b\u907f\u514d\u4ee5\u540e\u518d\u72af\u540c\u6837\u7684\u9519\u3002
5.\u4e0d\u7528\u614c\u5f20
\u5bf9\u4e8e\u96f6\u57fa\u7840\u7684\u521d\u5b66\u8005\u521a\u5f00\u59cb\u5b66\u4e60\u7684\u65f6\u5019\u90fd\u4f1a\u9047\u5230\u542c\u4e0d\u61c2\u542c\u4e0d\u660e\u767d\u7684\u73b0\u8c61\uff0c\u56e0\u4e3a\u786e\u5b9e\u4f60\u7684\u57fa\u7840\u6c34\u5e73\u5f88\u4f4e\uff0c\u4f46\u662f\u4e0d\u8981\u5bb3\u6015\u542c\u4e0d\u61c2\u662f\u80fd\u7406\u89e3\u7684\uff0c\u5c31\u6015\u4f60\u542c\u4e0d\u61c2\u4e4b\u540e\u5c31\u4e0d\u8ba4\u771f\u5b66\u4e60\u4e86\uff0c\u4e3b\u8981\u4f60\u575a\u6301\u5b66\u4e0b\u53bb\u4f60\u4f1a\u53d1\u73b0\u540e\u9762\u7684\u77e5\u8bc6\u5b66\u8d77\u6765\u8d85\u7ea7\u7b80\u5355\uff0c\u5c31\u8ddf0\u52301\u548c1\u5230100\u7684\u6982\u5ff5\u662f\u4e00\u6837\u7684\u3002

1\u3001\u811a\u672c\u8bed\u8a00\uff1a\u53c8\u88ab\u79f0\u4e3a\u6269\u5efa\u7684\u8bed\u8a00\uff0c\u6216\u8005\u52a8\u6001\u8bed\u8a00\uff0c\u662f\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00\uff0c\u7528\u6765\u63a7\u5236\u8f6f\u4ef6\u5e94\u7528\u7a0b\u5e8f\u3002
2\u3001\u7f16\u7a0b\u8bed\u8a00\uff1a\u4e00\u79cd\u8ba1\u7b97\u673a\u8bed\u8a00\u8ba9\u7a0b\u5e8f\u5458\u80fd\u591f\u51c6\u786e\u5730\u5b9a\u4e49\u8ba1\u7b97\u673a\u6240\u9700\u8981\u4f7f\u7528\u7684\u6570\u636e\uff0c\u5e76\u7cbe\u786e\u5730\u5b9a\u4e49\u5728\u4e0d\u540c\u60c5\u51b5\u4e0b\u6240\u5e94\u5f53\u91c7\u53d6\u7684\u884c\u52a8\u3002


\u4e8c\u3001\u7279\u70b9\u4e0d\u540c
1\u3001\u811a\u672c\u8bed\u8a00\uff1a\u811a\u672c\u901a\u5e38\u4ee5\u6587\u672c\uff08\u5982ASCII)\u4fdd\u5b58\uff0c\u53ea\u5728\u88ab\u8c03\u7528\u65f6\u8fdb\u884c\u89e3\u91ca\u6216\u7f16\u8bd1\u3002
2\u3001\u7f16\u7a0b\u8bed\u8a00\uff1a\u7a0b\u5e8f\u5728\u8fd0\u884c\u65f6\u53ef\u4ee5\u6539\u53d8\u5176\u7ed3\u6784\uff0c\u5f00\u53d1\u5feb\u901f\uff0c\u63a5\u8fd1\u81ea\u7136\u8bed\u8a00\uff0c\u6613\u4e8e\u7406\u89e3\uff0c\u66f4\u65b9\u4fbf\u7684\u4ee3\u7801\u7ba1\u7406\u3002
\u4e09\u3001\u4f18\u7f3a\u70b9\u4e0d\u540c
1\u3001\u811a\u672c\u8bed\u8a00\uff1a\u811a\u672c\u8bed\u8a00\u6781\u5927\u5730\u7b80\u5316\u4e86\u201c\u5f00\u53d1\u3001\u90e8\u7f72\u3001\u6d4b\u8bd5\u548c\u8c03\u8bd5\u201d\u7684\u5468\u671f\u8fc7\u7a0b\u3002\u5927\u591a\u6570\u811a\u672c\u8bed\u8a00\u90fd\u80fd\u591f\u968f\u65f6\u90e8\u7f72\uff0c\u800c\u4e0d\u9700\u8981\u8017\u65f6\u7684\u7f16\u8bd1/\u6253\u5305\u8fc7\u7a0b\u3002
2\u3001\u7f16\u7a0b\u8bed\u8a00\uff1a\u4efb\u4f55\u7f16\u7a0b\u8bed\u8a00\u7684\u4f7f\u7528\u90fd\u9700\u8981\u786e\u4fdd\u7f16\u5199\u7684\u7a0b\u5e8f\u80fd\u591f\u6839\u636e\u5b9e\u9645\u9700\u8981\u53ca\u65f6\u8c03\u6574\u3002\u56e0\u6b64\uff0c\u5feb\u901f\u539f\u578b\u5f00\u53d1\u73af\u5883\u975e\u5e38\u91cd\u8981\uff0c\u5728\u8fd9\u79cd\u73af\u5883\u4e0b\uff0c\u52a8\u6001\u8bed\u8a00\u548c\u76f8\u5173\u5e93\u7684\u7ed3\u5408\u53ef\u4ee5\u5927\u5927\u589e\u5f3a\u5176\u4f18\u52bf\u3002

\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-\u811a\u672c\u8bed\u8a00
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-\u7f16\u7a0b\u8bed\u8a00

算法思想
对于汉诺塔问题,当只移动一个圆盘时,直接将圆盘从 A 针移动到 C 针。若移动的圆盘为 n(n>1),则分成几步走:把 (n-1) 个圆盘从 A 针移动到 B 针(借助 C 针);A 针上的最后一个圆盘移动到 C 针;B 针上的 (n-1) 个圆盘移动到 C 针(借助 A 针)。每做一遍,移动的圆盘少一个,逐次递减,最后当 n 为 1 时,完成整个移动过程。
因此,解决汉诺塔问题可设计一个递归函数,利用递归实现圆盘的整个移动过程,问题的解决过程是对实际操作的模拟。
程序代码
#include <stdio.h>
int main()
{
int hanoi(int,char,char,char);
int n,counter;
printf("Input the number of diskes:");
scanf("%d",&n);
printf("\n");
counter=hanoi(n,'A','B','C');
return 0;
}
int hanoi(int n,char x,char y,char z)
{
int move(char,int,char);
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
return 0;
}
int move(char getone,int n,char putone)
{
static int k=1;
printf("%2d:%3d # %c---%c\n",k,n,getone,putone);
if(k++%3==0)
printf("\n");
return 0;
}

Leetcode-227. 用栈模拟汉诺塔问题

新视像
06-09
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:

(1) 每次只能移动一个盘子。(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。(3) 每个盘子只能放在比它大的盘子上面。

请写一段程序,实现将第一个堆的盘子移动到最后一个堆中。

样例

样例1:

输入: 3
输出:
towers[0]: []
towers[1]: []
towers[2]: [2,1,0]
样例2:

输入: 10
输出:
towers[0]: []
towers[1]: []
towers[2]: [9,8,7,6,5,4,3,2,1,0]
public class Tower {
private Stack<Integer> disks;
/*
* @param i: An integer from 0 to 2
*/
public Tower(int i) {
// create three towers
disks = new Stack<Integer>();
}

/*
* @param d: An integer
* @return: nothing
*/
public void add(int d) {
// Add a disk into this tower
if (!disks.isEmpty() && disks.peek() <= d) {
System.out.println("Error placing disk " + d);
} else {
disks.push(d);
}
}

/*
* @param t: a tower
* @return: nothing
*/
public void moveTopTo(Tower t) {
// Move the top disk of this tower to the top of t.
if (t.disks.isEmpty() || (!disks.isEmpty() && t.disks.peek() >= disks.peek())) {
t.disks.push(disks.pop());
}

}

/*
* @param n: An integer
* @param destination: a tower
* @param buffer: a tower
* @return: nothing
*/
public void moveDisks(int n, Tower destination, Tower buffer) {
// Move n Disks from this tower to destination by buffer tower
if(n<=0){
return;
}else if(n==1){
moveTopTo(destination);
}else{
moveDisks(n - 1, buffer, destination); //将源塔前几个盘子都放到辅助塔中
moveDisks(1, destination, buffer); //此时源塔只剩下一个最大的盘子,将它放到目标塔中
buffer.moveDisks(n - 1, destination, this); //最后再将辅助塔的全部盘子(因为此时目标塔上已经有了一个盘子,故辅助塔的盘子数为n-1)都放到目标塔上

}
}

/*
* @return: Disks
*/
public Stack<Integer> getDisks() {
// write your code here
return disks;
}
}

/**
* Your Tower object will be instantiated and called as such:
* Tower[] towers = new Tower[3];
* for (int i = 0; i < 3; i++) towers[i] = new Tower(i);
* for (int i = n - 1; i >= 0; i--) towers[0].add(i);
* towers[0].moveDisks(n, towers[2], towers[1]);
* print towers[0], towers[1], towers[2]
*/
搜索
一对一编程入门教程
c语言必背代码大全
完整的c语言编程代码
十大编程代码大全
c语言常用代码大全
初学编程代码大全

  • 銆C璇█銆戦掑綊璇﹁В姹夎濉旈棶棰
    绛旓細閫掓帹鍏紡鐢辨璇炵敓锛歠(n) = 2 * f(n-1) + 1锛岃繖灏辨槸姹夎濉绉诲姩娆℃暟鐨勯掑綊琛ㄨ揪銆備笉濡ㄧ湅鐪浠g爜绀轰緥锛岄氳繃C璇█锛屾垜浠彲浠缂栧啓杩欐牱鐨勫嚱鏁版潵璁$畻锛<stdio.h>int hanoi_step(int n) { if (n <= 1) return 1; else return 2 * hanoi_step(n - 1) + 1;}main() { int n, ...
  • 鐢–璇█缂绋嬪簭瑙e喅姹夎濉旈棶棰
    绛旓細include "stdafx.h"include <stdio.h> include <stdlib.h> int count;void movedisk(int,char,char,char);int _tmain(int argc, _TCHAR* argv[]){ int n;printf("杈撳叆鐩樺瓙鐨勬暟閲忥細");scanf("%d",&n) ;movedisk(n,'A','C','B');printf("鐩樺瓙鏁伴噺%d鐨勬椂鍊欑Щ鍔ㄤ簡%d娆n",n,count...
  • 鎬!!!姹姹夎濉攃璇█鍔ㄧ敾婕旂ず绋嬪簭!!!
    绛旓細include <graphics.h>#include<stdio.h>#include <conio.h>#include#include<math.h>#include<string.h>#define N 10 //瀹氫箟鐩樻暟RECT r = {240, 0, 460, 240};TCHAR step[5];int stepn=0;int pan[3];void dizuo(){ setlinestyle(PS_SOLID,NULL,4); line(20,400,160,400...
  • 姹夎濉旈棶棰,澶х鏉ョ湅鐪嬪晩,鐢╟璇█
    绛旓細鍥犱负n=2>1,鎵ц鏍囧織涓<2>鐨浠g爜锛屾鏃舵柟娉曞弬鏁颁负hannuota(1,'B','C','A');鍥犱负姝ゆ椂n=1锛屾墽琛屾爣蹇椾负<1>鐨勪唬鐮侊紝鎵撳嵃鍑築-->A;姝ゆ椂锛屾爣蹇椾负<2>鐨勭▼搴忔墽琛屽畬姣曪紝one锛宼wo锛宼hree鐨勫煎垎鍒负one=B,two=A,three=C;缁х画鎵ц鏍囧織<3>鐨勭▼搴弇ove(one,three); 鎵撳嵃鍑築-->C; 缁х画鎵ц鑷虫爣蹇<...
  • 姹夎濉鐨闂:4涓煴瀛,濡傛灉濉旂殑涓暟鍙樹綅a,b,c,d鍥涗釜,鐜拌灏唍涓渾鐩樹粠a...
    绛旓細C璇█锛歩nclude <iostream> using namespace std;void move(char a, char b){ cout<<a<<"--->"<<b<<endl;void hannuo(int n, char a, char b, char c , char d){ if(1==n){ move(a, d);else if(2 == n){ move(a, b);move(a, d);move(b, d);else{ hannuo(n-2...
  • C璇█缂栫▼(姹夎濉旈棶棰)
    绛旓細"%c-->%c",x,z);鈥斺旇繖鍙ユ槸杈撳嚭锛%c 鏄寚鎸塁HAR鍨嬭緭鍑猴紝"%c-->%c"锛屽氨鏄緭鍑轰袱涓狢HAR鍨嬫暟鎹紝涓棿鐢-->杩炴帴銆傝岃繖涓や釜CHAR鐨勬暟鎹氨鏄痻鍜寊銆傛瘮濡傜粨鏋滄槸锛歛-->c move(n-1,y,x,z);鈥斺旇繖鍙ヨ繕鏄皟鐢ㄥ嚱鏁,杩欎釜鍑芥暟灏辨槸鍓嶉潰澹版槑鐨:void move(int n,int x,int y,int z)...
  • C璇█姹夎濉旈棶棰
    绛旓細include<stdio.h>int n,a[3][21];void hanoi(int m,int x,int y,int z){int i,j,k; if(m>1)hanoi(m-1,x,z,y); a[z][a[z][0]+1]=a[x][a[x][0]]; a[x][0]--; a[z][0]++; for(i=0;i<3;i++) {for(j=n;j>0;j--) printf("%c",j>a[...
  • 楂樻墜甯繖鐪嬩笅杩欎釜C璇█瀹炵幇鐨勫叧浜姹夎濉旈棶棰鐨勭▼搴
    绛旓細//渚嬪杩欏彞 hanoi(n-1,A,C,B); 杩欐椂A鎸嘇锛孋灏辨寚B鍟︼紝绗笁涓瓧姣 printf("Move disk %d from %c to %c\n",n,A,C);} else { //鍚﹀垯锛屾妸n-1蹇粠A閫氳繃C绉诲埌B hanoi(n-1,A,C,B); /* Copyrighter by SS7E */ //绗琻蹇粠A绉诲埌C printf("Move disk %d from %c to %c...
  • 鐢–璇█浠g爜鏉ョ紪鍐欏惈姹夎濉旈棶棰,鍒╃敤鍫嗘爤鏉ュ疄鐜.姹備唬鐮
    绛旓細绋嬪簭浠g爜 include <stdio.h> int main(){ int hanoi(int,char,char,char);int n,counter;printf("Input the number of diskes锛");scanf("%d",&n);printf("\n");counter=hanoi(n,'A','B','C');return 0;} int hanoi(int n,char x,char y,char z){ int move(char,int,char)...
  • C璇█姹夎濉旈棶棰闈為掑綊瑙f硶浠g爜姹傚ぇ绁炶瑙
    绛旓細int game2()瑕佹敼涓篿nt main()鍚庢墠鍙紪璇戣繍琛岋細include<stdio.h> include<stdlib.h> define CSZL 10 define FPZL 10 typedef struct hanoi { int n;char x,y,z;}hanoi;typedef struct Stack //瀹氫箟鏍堢粨鐐 { hanoi *base,*top;int stacksize;}Stack;int InitStack(Stack *S){ S->base=(...
  • 扩展阅读:扫一扫题目出答案 ... 汉诺塔c语言程序代码 ... c++入门程序代码 ... python基础代码大全 ... 编程必背100个代码 ... cnc编程必背50个程序 ... c语言必背100代码 ... 最浪漫的编程代码 ... 初学编程100个代码大全 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网