-
-
1
-
1
-
0using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleHanoi { class Program { public static int s = 0; static void hanoi(char A, char B, char C, int count) { if (count == 1) { Console.WriteLine("1: " + A + "->" + B); } else { hanoi(A, C, B, count - 1); Console.WriteLine(count + ": " + A + "->" + B); hanoi(C, B, A, count - 1); } s++; Console.WriteLine(s); } static void Main(string[] args) { Console.WriteLine("请输入圆盘个数:"); int N = 0; N = Convert.ToIn
-
4#include <stdio.h> #include <stdlib.h> int Times[100]={0}; int Here[3]={0}; int There[3]={0}; long int all; int main(int argc, char *argv[]) { void move(int mum,char here ,char there); void Hano(int n,char here,char there); void done(); int n; printf("Equip n:\n"); scanf("%d",&n); freopen("out.txt","w",stdout); Hano(n,*A*,*C*); done(); //system("PAUSE"); return 0; } void move(int mum,char here ,char there) { Times[mum-1]++; Here[here-*A*]++; There[there-*A*]++; all++; printf("Move #%d plate from %c to %c ,and then...\n"
-
31,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],...,a[n]. a[1]=n,a[2]=n-1,...,a[n]=1.即a[1]是最下面的盘子.把n个盘子移动到第3根柱子.每次只能移动1个盘子,且大盘不能放在小盘上.问第m次移动的是哪一个盘子,从哪根柱子移到哪根柱子.例如:n=3,m=2. 回答是 :2 1 2,即移动的是2号盘,从第1根柱子移动到第2根柱子 这是我输出所有步数的代码 #include<stdio.h> int num=1; void move(char x,ch
-
0http://www.zhishiml.com/cpp3dghanoi.html
-
3自己想出来的~~~~~和网络上的算法基本一致~~~~~~~ Dim d(2) As Integer Dim x As Integer Private Sub Command1_Click() x = 0 If Not Label1.UBound = 1 Then For i = 2 To Label1.UBound '卸载多余的Label Unload Label1(i) Next End If For i = 2 To Val(Text1.Text) '加载需要的Label Load Label1(i) Label1(i).Width = 135 + 120 * i '赋予合适宽度 Next For i = 1 To Label1.UBound '赋予合适位置 Label1(i).Left = Line1(1).X1 - Label1(i).Width \ 2 Label1(i).Top = Line1(1).Y2 - 255 * (Label1.UBound - i + 1) Label1(i).Visible = True Next
-
18RT
-
5大家都说不依赖电脑,但只在电脑上玩汉诺塔的游戏是体会不到真正的汉诺塔的
-
00多柱汉诺塔有人研究过么?公式能不能弄出来0求问,将奇数号盘子和偶数号分开要怎么做呢0在网上都搜不到什么汉诺塔下载,不知道有没有可以给个安装包~电脑上可以不联网直接玩的,跪谢!6一口气玩到8就不想玩了,太麻烦了,怎么算是高难度游戏呢,规律太好找。0110假设汉诺塔数量是n(n≥3 的整数)个 如果n是奇数个 那么在最开始的时候 最小的那个块 首次放到的空位置 就是最后所有块将要落到的位置 ,如果是偶数个 那么最后所有块要放到的位置就是 另一个位置 。 然后总步数至少是2^n-1 。我又重新玩了一阵 发现了这样一个规律 然后一直玩到九层 第十层真心懒得玩了 步数很多。。其实就是因为之前玩的时候会出现很多很多的废步 所以简单研究了一番。 举个例子吧 ,假如就是三层 ,三排木棍ABC ,假如第一10大龄屌丝第一次玩汉诺塔 6层的 用了8分钟左右 这个是什么智商水平32汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果恰如上题,面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能4var n,k:longint; procedure try(y,g,m:string; n:longint); begin if n=1 then begin writeln(y,'-->',m); inc(k); end else begin try(y,m,g,n-1); try(y,g,m,1); try(g,y,m,n-1); end; end; begin read(n); try('a','b','c',n); writeln(k); end.0#include "stdio.h" void main() { void hanoi(int n,char one,char two,char three) ; int m; printf("input the number of diskes:") ; scanf("%d",&m); printf("The step to moveing %d diskes:\n",m); hanoi(m,'A','B','C'); } void hanoi(int n,char one,char two,char three) { void move(char x,char y); if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } void move(char x,char y) { printf("%c-->%c\n",x,y); }00#include<stdio.h> #include<math.h> main() { int a,b,c,d,p,n=44,i,k; //a,b,c,d作为123交换用 ,n为盘数 //p表示总步数,i为往上回朔的次数,k为这个盘子的位置很重要 for(p=1;p<=pow(2,n)-1;p++){ k=p; a=1; b=2; c=3; // 向上回朔的循环 for(i=1;i<=n-1;i++){ //作变换 switch(k%4){ case 3: d=b; b=a; a=d; break; case 1: d=c; c=b; b=d; break; default: break; } k=k/2+k%4%3%2; //向上一次位子的变换 } // 打印有些麻烦 要打印是1的字母到是3的字母 if(a==1){ if(b==2) printf("a-c\t"); else printf("a-b\t"); } else{ if(a==2){ i200利用TC图形处理功能,在屏幕上动态显示当盘子数为3时,Hanoi塔问题的解决过程。(盘子可用矩形表示) 哪位高手能帮我做出来啊!!!谢谢了0顶顶顶顶顶0就是标题了!0编一个函数用来实现左右循环移位.函数名为move,调用方法为move(value,n),其中value为要循环移位的数,n为位移的位数.如n<0,表示左移;n>0表示右移.如n=4,表示右移4位;n=-3,表示要左移3位.0有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后在数下去.直到最后只剩下一个人为止.问此人原来的位置是多少号. 要求;编出程序并且画出流程图.0主营成人玩具