當前位置:首頁 » 課程設計 » 漢諾塔課程設計

漢諾塔課程設計

發布時間: 2021-03-02 14:35:53

❶ vb編程:漢諾塔

這個程序難度不小,估計是個課程設計或是畢業設計之類的,我建議你還是自己先動手做,當遇到問題再提出來大家幫忙。不是一個人一兩天能做出來的,只要開始去做,好的開始是成功的一半。

❷ 急求漢諾塔演示的C語言課程設計報告啊

而且必須用到雙遞歸,我用匯編語言做了兩天才做完,最重要一點,雙遞歸

❸ 誰會用C語言解決漢諾塔問題請進,最好把每一步的解釋寫上。

#include <graphics.h>
struct H
{
int data[15];/*存放每個盤的代號*/
int top;/*每個塔的具體高度*/
}num[3];/*三個塔*/
void move(char x,char y,struct H num[3]);/*移動的具體過程*/
void hanoi(char x,char y,char z,int n,struct H num[3]);/*遞歸*/
void Init(void);/*初始化*/
void Close(void);/*圖形關閉*/
int computer=1;/*自動控制與手動控制的標志*/
int speed=0;/*全局變數speed主要是演示過程的速度*/
void main(void)
{
Init();/*初始狀態*/
Close();/*圖形關閉*/
exit(0);
getch();
}
void Init(void)/*初始化*/
{
int gd=DETECT,gm;
int i,n,color;
clrscr();
printf("please input n(n<=10): ");/*輸入要演示的盤子數*/
scanf("%d",&n);
printf("Please input 1 or 2:\n1.computer 2.people\n");
scanf("%d",&i);
if(i==2)/*選擇手動控制標志為0*/
computer=0;
if(n<1||n>10)
n=10;/*越界的話n當10處理*/
if(computer)/*如果是自動控制的話輸入速度*/
{
printf("please input speed: ");/*輸入速度*/
scanf("%d",&speed);
}
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
for(i=0;i<3;i++)
num[i].top=-1;/*三個地方的高度開始都為-1*/
for(i=0;i<n;i++)/*畫一開始的塔座A上的盤子*/
{
num[0].top++;/*棧的高度加1*/
num[0].data[num[0].top]=i; /*最大的盤子代號為0,依次為1,2,…n-1*/
color=num[0].data[num[0].top]+1;/*盤子的顏色代碼為棧頂盤子代號加1*/
setfillstyle(SOLID_FILL,color);
bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+
(33-3*num[0].data[num[0].top]),400-20*i+8); /*畫矩形*/
}
setcolor(YELLOW);
outtextxy(180,450,"any key to continue");
settextstyle(0,0,2);
outtextxy(90,420,"A"); /*塔座標志*/
outtextxy(240,420,"B");
outtextxy(390,420,"C");
getch();/*接收字元後就執行遞歸操作*/
hanoi('a','b','c',n,num);
}
void move(char x,char y,struct H num[3])/*移動的具體過程*/
{
int i;
char num1[3],num2[3];
sprintf(num1,"%c",x-32);/*將小寫變成大寫,並轉換成字元串輸出*/
sprintf(num2,"%c",y-32);
setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去塗黑*/
bar(0,0,640,60);
setcolor(RED);
outtextxy(150,30,num1);/*輸出移動過程*/
outtextxy(200,30,"--->");
outtextxy(310,30,num2);
settextstyle(0,0,2);
setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去塗黑*/
bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),
400-20*num[x-97].top-8,100+150*(x-97)+(33-3*
num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);
num[y-97].top++;/*入棧,目標點的top加1*/
num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目標點盤子的代號與源點盤子的代號相同*/
num[x-97].top--;/*出棧,原來地方的top減1*/
setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盤子顏色代碼是棧頂盤子代號加1*/
bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),
400-20*num[y-97].top-8,100+150*(y-97)+
(33-3*num[y-97].data[num[y-97].top]),400-20*num[y-97].top+8);
if(computer)/*自動控制就用delay*/
delay(speed);/*延時函數*/
else
getch();/*手動控制的話就自己按鍵盤來控制*/
}
void hanoi(char one,char two,char three,int n,struct H num[3])/*遞歸n為盤子數,num為堆棧*/
{
if(n==1)
move(one,three,num);/*如果盤子為1,將這個盤子從塔座A移動到塔座C*/
else
{
hanoi(one,three,two,n-1,num);/*將塔座A的前n-1個盤子移到塔座B*/
move(one,three,num);/*將塔座A的第n個盤子移到塔座C*/
hanoi(two,one,three,n-1,num); /*將塔座B的n-1個盤子移到塔座C*/
}
}
void Close(void)/*圖形關閉*/
{
getch();
closegraph();
}

❹ C語言課程設計答案

#include<stdio.h>
void hanoi(int n,char a,char b,char c);//移動盤子
void move(int num,char fron,char to);//顯示盤子移動次數
main()
{
int n;
printf("輸入盤子數:");
scanf("%d",&n);
printf("移動盤子的步數:\n",n);
hanoi(n,'A','B','C');
}
void hanoi(int n,char a,car b,char c)
{
if(n==1) { move(n,a,b)};//盤子從a移動到b
else {
hanoi(n-1,a,c,b);//將第版n-1個盤子,借權助於b由a移動到c
move(n,a,b);//第n個盤子由a-》b
hanoi(n-1,c,b,a);//將第n-1個盤子,藉助於a由c移動到b
}
}
void move(int num,char from,char to)
{
printf("move %d:form %c to %c \n",num,form,to);
}

❺ 數據結構課程設計的圖書目錄

第1章 數據結構課程設計概述
1. 數據結構簡介
1.2 課程設計目標和特點
1.3 編寫說明
1.4 課程設計實例的標准格式
第2章 線性表的應用
2.1 存儲結構與基本運算的演算法
2.2 集合的交、並運算
2.3 學生成績管理
2.4 多項式求導
2.5 約瑟夫環問題
2.6 資料庫管理系統
第3章 棧的應用
3.1 存儲結構與基本運算的演算法
3.2 括弧匹配
3.3 漢諾塔問題
3.4 算術表達式求值
3.5 馬踏棋盤
第4章 隊列的應用
4.1 存儲結構與基本運算的演算法
4.2 看病排隊候診問題
4.3 數制的轉換
4.4 停車場管理
4.5 基數排序
第5章 串的應用
5.1 存儲結構與基本運算的演算法
5.2 KMP演算法
5.3 最長公共子串
5.4 大整數計算器
第6章 多維數組和廣義表的應用
6.1 存儲結構與基本運算的演算法
6.2 魔方陣
6.3 稀疏矩陣的加法運算
6.4 本科生導師制問題
第7章 樹狀結構的應用
7.1 存儲結構與基本運算的演算法
7.2 線索二叉樹的創建與遍歷
7.3 由遍歷確定二叉樹
7.4 電文的編碼和解碼
7.5 家族關系查詢系統
第8章 圖狀結構的應用
8.1 存儲結構與基本運算的演算法
8.2 地鐵建設問題
8.3 安排教學計劃
8.4 校園導航
附錄A 課程設計實例軟體包
參考文獻

❻ 怎麼用歸納法證明漢諾塔問題 演算法設計與分析的課後習題

如果來柱子標為ABC,要由A搬至C,在自只有一個盤子時,就將它直接搬至C,當有兩個盤子,就將B當作輔助柱。
如果盤數超過2個,將第三個以下的盤子遮起來,就很簡單了,每次處理兩個盤子,也就是:A->B、A ->C、B->C這三個步驟,而被遮住的部份,其實就是進入程式的遞回處理。
事實上,若有n個盤子,則移動完畢所需之次數為2^n - 1

演演算法Procere HANOI(n, A, B, C) [
IF(n == 1) [
PRINT("Move sheet " n " from " A " to " C);
]
ELSE [
HANOI(n-1, A, C, B);
PRINT("Move sheet " n " from " A " to " C);
HANOI(n-1, B, A, C);
]
]

❼ 本人有漢諾塔的 程序,麻煩大家調試一下發幾張運行圖片過來!

你試試能不能運行
/*5. 源程序*/
/********hanoi.c*********/
#include <graphics.h>
struct H
{
int data[15];/*存放每個盤的代號*/
int top;/*每個塔的具體高度*/
}num[3];/*三個塔*/
void move(char x,char y,struct H num[3]);/*移動的具體過程*/
void hanoi(char x,char y,char z,int n,struct H num[3]);/*遞歸*/
void Init(void);/*初始化*/
void Close(void);/*圖形關閉*/
int computer=1;/*自動控制與手動控制的標志*/
int speed=0;/*全局變數speed主要是演示過程的速度*/
void main(void)
{
Init();/*初始狀態*/
Close();/*圖形關閉*/
exit(0);
}
void Init(void)/*初始化*/
{
int gd=DETECT,gm;
int i,n,color;
clrscr();
printf("please input n(n<=10): ");/*輸入要演示的盤子數*/
scanf("%d",&n);
printf("Please input 1 or 2:\n1.computer 2.people\n");
scanf("%d",&i);
if(i==2)/*選擇手動控制標志為0*/
computer=0;
if(n<1||n>10)
n=10;/*越界的話n當10處理*/
if(computer)/*如果是自動控制的話輸入速度*/
{
printf("please input speed: ");/*輸入速度*/
scanf("%d",&speed);
}
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
for(i=0;i<3;i++)
num[i].top=-1;/*三個地方的高度開始都為-1*/
for(i=0;i<n;i++)/*畫一開始的塔座A上的盤子*/
{
num[0].top++;/*棧的高度加1*/
num[0].data[num[0].top]=i; /*最大的盤子代號為0,依次為1,2,…n-1*/
color=num[0].data[num[0].top]+1;/*盤子的顏色代碼為棧頂盤子代號加1*/
setfillstyle(SOLID_FILL,color);
bar(100-(33-3*num[0].data[num[0].top]),400-20*i-8,100+
(33-3*num[0].data[num[0].top]),400-20*i+8); /*畫矩形*/
}
setcolor(YELLOW);
outtextxy(180,450,"any key to continue");
settextstyle(0,0,2);
outtextxy(90,420,"A"); /*塔座標志*/
outtextxy(240,420,"B");
outtextxy(390,420,"C");
getch();/*接收字元後就執行遞歸操作*/
hanoi('a','b','c',n,num);
}
void move(char x,char y,struct H num[3])/*移動的具體過程*/
{
int i;
char num1[3],num2[3];
sprintf(num1,"%c",x-32);/*將小寫變成大寫,並轉換成字元串輸出*/
sprintf(num2,"%c",y-32);
setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去塗黑*/
bar(0,0,640,60);
setcolor(RED);
outtextxy(150,30,num1);/*輸出移動過程*/
outtextxy(200,30,"--->");
outtextxy(310,30,num2);
settextstyle(0,0,2);
setfillstyle(SOLID_FILL,BLACK);/*把原來的地方移去塗黑*/
bar(100+150*(x-97)-(33-3*num[x-97].data[num[x-97].top]),
400-20*num[x-97].top-8,100+150*(x-97)+(33-3*
num[x-97].data[num[x-97].top]),400-20*num[x-97].top+8);
num[y-97].top++;/*入棧,目標點的top加1*/
num[y-97].data[num[y-97].top]=num[x-97].data[num[x-97].top];/*在目標點盤子的代號與源點盤子的代號相同*/
num[x-97].top--;/*出棧,原來地方的top減1*/
setfillstyle(SOLID_FILL,num[y-97].data[num[y-97].top]+1);/*盤子顏色代碼是棧頂盤子代號加1*/
bar(100+150*(y-97)-(33-3*num[y-97].data[num[y-97].top]),
400-20*num[y-97].top-8,100+150*(y-97)+
(33-3*num[y-97].data[num[y-97].top]),400-20*num[y-97].top+8);
if(computer)/*自動控制就用delay*/
delay(speed);/*延時函數*/
else
getch();/*手動控制的話就自己按鍵盤來控制*/
}
void hanoi(char one,char two,char three,int n,struct H num[3])/*遞歸n為盤子數,num為堆棧*/
{
if(n==1)
move(one,three,num);/*如果盤子為1,將這個盤子從塔座A移動到塔座C*/
else
{
hanoi(one,three,two,n-1,num);/*將塔座A的前n-1個盤子移到塔座B*/
move(one,three,num);/*將塔座A的第n個盤子移到塔座C*/
hanoi(two,one,three,n-1,num); /*將塔座B的n-1個盤子移到塔座C*/
}
}
void Close(void)/*圖形關閉*/
{
getch();
closegraph();
}


❽ 數據結構漢諾塔問題

#include <stdio.h>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);
}
}int main()
{
int num;
printf("請輸入圓盤的數量:\n");
scanf("%d",&num);
printf("移動%d個盤回子的步驟如下答:\n");
move(num,'A','B','C');
return 0;
}

❾ 計算機行業用人要求

今天上午又去招聘了,加上前面一段時間的招聘經驗,有些話不吐不快

我們希望找到能幹活的人,就是能編程序的人,但是我感覺現在剛畢業的人裡面,包括名校的,能幹活的人比例非常的低,大概不超過百分之一

很多人都說,沒有參加過實際的項目,沒有經驗,希望能夠在工作過程中學習等等,開始的時候我也這樣認為,隨著面試的人的增多,手下新人的增多,我的看法逐漸變了

不談個人主觀能動性方面的種種問題,我想談談我心目當中的科班出身編程序選手的及格線

如果你希望編程序為生的話,那麼,大學才是你最重要的經驗積累地點,相反,工作單位能夠積累的東西很少,或者說絕對是第二位的

大學裡面,最重要的課程有兩門,一門是編譯原理,一門是數據結構,這兩門課的課程都不重要,重要的是課程設計,也就是老師讓你上機做的題目,就我這段時間面試的上百人來說,我認為其中的九十九個,這兩門課的課程設計要麼是直接復制別人的,要麼是矇混過關的[只碰到一個真刀真槍作過的],其實,這兩門課是你大學里所有學習內容當中對編程序的能力進行訓練的最根本內容,也是你在社會上永遠碰不到的學習機會,任何,不論多貴的培訓機構,也不可能給你提供這兩門課的訓練深度,我見過太多的畢業之後又花一兩萬塊參加各種形式的培訓機構培訓一年的選手了,你學會一萬種框架的配置方法,也不如你大學的時候把這兩門課上好有意義

編譯原理的課程設計,一般來說要求做一個詞法分析器或者語法分析器,最屁要你做一個數學公式的逆波蘭式解析,我個人看法詞法分析器或者語法分析器都可以,單作逆波蘭式,則最好能夠做到支持各種類型的運算的地步,比如邏輯運算等等,這門課的課程設計如果能夠獨立完成,可以在你的大腦裡面創建一個整體化的計算機思考方式,最重要的是,這個過程能夠讓你學會面對一個復雜問題的時候,如何通過各種計算機語言來解決問題,、、、,好處不再列舉,其實你畢業之後參加的任何培訓,其演算法復雜程度都不可能和這門課程相比

數據結構的課程設計,關鍵點在於兩個,一個是數據結構和演算法本身,這里需要理解和學習的主要內容是循環和遞歸等等,其實如果你上面一個做得好,這些都不是太大問題了,學習一下各種數據結構的應用還有些意義;第二個最重要的訓練目的,就是如何在計算機當中表達問題的問題,很多人跟我說,我的課程設計是二叉樹排序,輸入就是我自己輸進去一堆數字,輸出就是把這些數字排好了再輸出到屏幕上、、、faint,暈倒,講一個漢諾塔的例子吧:
漢諾塔本身的演算法只有二十幾行,不太好理解,但是也不難理解,那麼,如果希望做一個東西,把漢諾塔表達一下,應該考慮什麼東西呢?
首先,需要考慮清楚幾個塔,個個盤子,應該用什麼表達,用什麼數據結構表達?這個是一個關鍵問題,需要能夠把塔和盤子和數組以及數組裡面的元素對應起來思考問題,不要看這一點簡單,實際上太多人根本就沒有辦法在大腦裡面完成這個轉換、、
其次,要考慮清楚其中有哪些元素可能發生變化,盤子的數目是最簡單的變化元素了,有沒有其它的了呢?
有,移動的速度,如果你移動得太快,那麼誰也看不清楚,你等於什麼也沒做、、那麼,至少兩個元素要可變,一個是移動速度,一個是盤子數目
好,輪到表達方式了,你要是牛的話,就畫成棍子上面穿著有洞的盤子,不行的話就豎線上面穿橫線,移動的過程,牛的話做成動畫??不行的話就演示每個步驟地結果既可
好,該怎麼畫出來呢,這個時候你就要弄明白如何在屏幕上劃線,這個簡單,重要的是如何擦掉一條線,還不能把棍子的那個點擦掉,這就有點問題了、、
好了,上面問題都解決完畢之後,用什麼語言編程序就很次要了,c也好,pascal,java,任何語言,一個帶兩個參數的動畫演示漢諾塔的東東就出世了、、、[我花了一個半小時]

數據結構的學習過程中,如果能夠在四五個題目上面做到上面的深度,相信你絕對受歡迎

以上兩個課程設計,如果都能夠獨立完成,一般來說畢業後兩三年內收入必然超過五千,如果在北京上海,應該可以肯定超過一萬

❿ 漢諾塔問題

so easy.................................................................................................................................................................

熱點內容
幼師專業怎麼樣 發布:2021-03-16 21:42:13 瀏覽:24
音樂小毛驢故事 發布:2021-03-16 21:40:57 瀏覽:196
昂立中學生教育閘北 發布:2021-03-16 21:40:47 瀏覽:568
建築業一建報考條件 發布:2021-03-16 21:39:53 瀏覽:666
2017年教師資格注冊結果 發布:2021-03-16 21:39:49 瀏覽:642
中國教師資格證查分 發布:2021-03-16 21:39:41 瀏覽:133
踵什麼成語有哪些 發布:2021-03-16 21:38:20 瀏覽:962
東營幼師專業學校 發布:2021-03-16 21:35:26 瀏覽:467
機械電子研究生課程 發布:2021-03-16 21:33:36 瀏覽:875
杭州朝日教育培訓中心怎麼樣 發布:2021-03-16 21:33:28 瀏覽:238