| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 787 人关注过本帖
标题:汉诺塔问题
只看楼主 加入收藏
su8610
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-12-1
收藏
 问题点数:0 回复次数:6 
汉诺塔问题
小弟做数据结构题目的时候,遇到一题目要求算出汉诺塔,移动64个盘子的次数
#include <stdio.h>
main()
{
  int i,a=0;
  long int num=1;
  printf("please input the number of the dishes:");
  scanf("%d",&a);
  for(i=2;i<=a;i++)
  {
  num=num*2+1;
  }
  printf("%5ld",num);
  getch();
}
但输出的时候,就输不出来,不知道用什么格式才能完整地输出来呢?
搜索更多相关主题的帖子: 汉诺塔 
2008-12-09 17:50
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
不知道你要输出什么,汉诺塔不是这样写的
#include<stdio.h>//this is the program of hannoih
void main()
{
     void hanoi(int n,char one,char two,char three);
     int m;
     printf("输入数目n=");
     scanf("%d",&m);
     printf("移动步骤是:\n");
     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);
     }

在虚拟的世界中寻找目标。
2008-12-09 21:15
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
64个盘子的hanio tower的递归次数为2的64次方-1,约1.8 * 10的19次方.
不是一个整数可以装下的.可以定义一个字符串模拟2进制运算.

without further ado, let’s get started
2008-12-09 21:50
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:0 
也不是一个小时可以运行完的

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2008-12-09 23:08
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
以下是引用新浪在2008-12-9 23:08的发言:

也不是一个小时可以运行完的

这个程序在10000以内可以毫秒级完成.
程序代码:
#include   <stdio.h>
#include   <stdlib.h>
#include   <math.h>

void Cal(int n) {
    
    char  * steps  ; 
    int   head , tail , size ;
    int   carry  = 0 , k , i;
    
    size = (int)(log10(2) * n) + 1 ;
    
    steps = (char *)malloc(size) ;
    steps[size] = '\0' ;
    steps[size-1] = '1' ;
    head = size-1 ;
    for (i = 0 ; i < n ; i++) {
         for (tail = size-1 ; tail >= head ; tail--) {
               k = steps[tail] - '0' ;
               steps[tail] = (k * 2 ) % 10 + carry + '0' ;
               carry = k * 2 / 10 ;
         }
         if (carry) {
             head-- ;
             steps[head] = carry + '0' ;
         }
         carry = 0 ;
    }
    steps[size - 1] -= 1 ;
    puts(steps) ;
    free(steps) ;
return  ;
}

int main(void) {
    
    int   n ;
    scanf("%d" , &n) ;
    Cal(n) ;
  return 0 ;
}

without further ado, let’s get started
2008-12-10 01:41
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 第5楼 iFreeBSD 的帖子
在vc上怎么有问题?
2008-12-10 09:44
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
以下是引用ying8501在2008-12-10 09:44的发言:

在vc上怎么有问题?


vc上有问题,你去找vc,我发的代码之前一般都在2中编译器上运行过. lcc , gcc .

without further ado, let’s get started
2008-12-10 18:02
快速回复:汉诺塔问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016969 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved