【wikioi 3145】汉诺塔游戏C代码

原创 2013年12月02日 21:26:09

//汉诺塔
#include<stdio.h>
#include<stdlib.h>

void work(int n,int s,int t)  //参数如上面所说
{
     char x='A'+s-1;   //方便输出字母
     char y='A'+t-1;
     if(n == 1)   //结束条件
     {
         printf("%d from %c to %c\n",n,x,y);
         return ;
     }
 
     int v=6-s-t;//即非起点与终点的塔
     work(n-1,s,v);   //递归结构  向缓冲区挪动
     printf("%d from %c to %c\n",n,x,y);
     work(n-1,v,t);    //缓冲区挪回
}

/*  ……

    将最大的盘挪到终点->倒数第二及前面挪到缓冲区,以此类推

    ……

  

*/


int main(void)
{
  int i,j;
  int x,y;
  int sum=1;
  int n;

  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    sum=sum<<1;
  }
  sum--;//2的n次方-1
  printf("%d\n",sum);
 
  work(n,1,3);//A 为1,B 为2,C为3
  
  return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[Wikioi 3145]汉诺塔游戏

/* 思路: 观察移动步骤,可以将移动步骤分成3个部分,这里暂且假设可以一次性移动多个盘子,在后面的递归操作中将分解这些不合题意的步骤: eg:将最顶端盘子编号为top的a塔的n个盘子移动到b塔...
  • qpswwww
  • qpswwww
  • 2014年05月19日 17:29
  • 1024

[递归]CODEVS-3145 汉诺塔游戏

CODEVS-1842 递归第一次递归递归,即定义一组基本操作,这组操作将规模小一点(或大一点)的操作当做一个整体——无需关心它的细节,只当它已经完成了——然后执行剩下的操作。而在更小或更大的规模中也...

CODEVS 3145 汉诺塔游戏

题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所...

经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现

所有代码均用js代码实现,可以直接把代码复制到浏览器的console控制台运行。...

汉诺塔游戏代码 v1.0

  • 2006年01月13日 09:51
  • 260KB
  • 下载

100行C代码实现字符打印汉诺塔

#include /*-------------------------------------------\ | 仅供于实现功能,看情况自己再添加延时函数等实现动画效果 | \-----------...

汉诺塔游戏代码

  • 2014年05月16日 15:10
  • 68KB
  • 下载

汉诺塔游戏代码经典一篇

  • 2009年10月28日 13:30
  • 1KB
  • 下载

Wikioi 天梯 1501/1842/3038/3143/3145

http://wikioi.com/training/?id=32 笔者终于受不了把解题报告写成教程的日子了,由于想写些交流思维的东西,笔者决定放弃Wikioi上普及一等之前的所(仅)有(剩)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【wikioi 3145】汉诺塔游戏C代码
举报原因:
原因补充:

(最多只允许输入30个字)