Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349889
  • 博文数量: 89
  • 博客积分: 2919
  • 博客等级: 少校
  • 技术积分: 951
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-23 11:51
个人简介

好懒,什么都没写

文章分类

全部博文(89)

文章存档

2012年(3)

2011年(17)

2007年(20)

2006年(49)

我的朋友

分类: C/C++

2006-10-08 09:38:08

       2006.10.2日游览吉林北山公园,买了一个九连环,这是我首次完九连环。意犹未尽,回来之后写了一个 C 程序,大致如下:

#include

static int upstep = 0;
static int downstep = 0;

void UpRing();               /*加上函数说明,否则编译将会出一点小错误*/

void DownRing(int n)     /*下环的逻辑就体现在这里*/
{
    if(n>2) DownRing(n-2);
    printf("DW:%d\t",n);++downstep;
    if(n>2) UpRing(n-2);
    if(n>1) DownRing(n-1);
}

void UpRing(int n)         /*上环的逻辑则体现在这里*/
{
    if(n>1) UpRing(n-1);
    if(n>2) DownRing(n-2);
    printf("UP:%d\t",n);++upstep;
    if(n>2) UpRing(n-2);
}

int
main(int argc, char **argv)      /*简洁的主函数*/
{
    if(argc < 2)
    {
        puts("Usage:./jiulianhuan 9");
        return -1;
    }
    int rings = atoi(argv[1]);
    puts("Starting...");
    DownRing(rings);
    puts("\nEnding...")
    printf("\nup = %d,\tdown = %d\n",upstep,downstep);
    return 0;
}


    该程序解九连环需要341个步骤,人工的话,步骤要少些。因为第一环、第二环的安装与拆卸有很多时候是可以一起完成的,省了不少步骤。
   
    其实,该程序可以 解 任意 N 连环。

    当时卖九连环的老大爷还卖18连环,他说他一个月也没能拆卸成功,当时我不以为然。现在用这个程序计算了一下,完全解开18连环需要 174762 步,以每天 8*60*60的速度拆卸,也需要六天多的时间才能完成,看来真的很不简单。



阅读(2267) | 评论(11) | 转发(0) |
给主人留下些什么吧!~~