首先呢,为何要写下这么有想(zuo)法(si)的一篇文章呢? 身为一个程序猿啊,总是会为身边的朋友总结出一些奇(nao)奇(ai)怪(wan)怪(qi)的论题,所以呢,下面就是背景阐述环节啦。
某日,在本猿常驻扎的一个微信群里面,有一个小伙伴说到,汉诺塔递归算法真是个令人头大的问题哇。本猿心想,这有很难,想当初本猿为汉诺塔递归输入了一个 n = 10000。。。从此就过上了与dos命令行朝夕相伴的日子。
嗯嗯嗯嗯,你说这跟七夕有毛线关系哇。我反手就是。。。一个赞。。。重点来了,敲黑板,划重点,划重点!!!
本猿所在的这个群里面,有一个妹子是个狂热的追星族,最喜51,爱屋及乌,亦喜51他D,51他dddddd..........近来亦沉迷于诸多不可言的小哥哥世界里。 于是,本猿,左脑一动,右脑一转,提出了如下惊动天地气死鬼神的神作:
某名花痴,有N名初始意中人,请按照顺位排序的方法,帮助这名花痴同学,将这些初始意中人,发展成为目标意中人。
这时候就要我们的汉诺塔大人出场咯,略略略略略略略略。。。。。
我是华丽丽的分割线 ~~~~~~~~~~~~~~
#include
<stdio.h>
int
i=1;
//
记录意中人发展过程
//
将编号为
n
的意中人由
from
移动到
to
void
move(
int
n,
char
from,
char
to)
{
printf(
"
第
%d
个
:
将
%d
号意中人从
%c
发展为
%c\n "
,i++,n,from,to);
}
void
hanoi(
int
n,
char
from,
char
denpend_on,
char
to)
//
将
n
个意中人由初始意中人移动到目标意中人
(
利用潜在意中人
)
{
if
(n==1)
move(1,from,to);
//
只有一个意中人是直接将初始意中人移动到目标意中人
else
{
hanoi(n-1,from,to,denpend_on);
//
先将初始意中人的前
n-1
个意中人借助目的意中人移动到潜在意中人上
move(n,from,to);
//
将剩下的一个意中人移动到目的意中人上
hanoi(n-1,denpend_on,from,to);
//
最后将潜在意中人里的
n-1
个意中人移动到目的意中人上
}
}
void
main()
{
printf(
"
请输入意中人的个数
:\n"
);
int
n;
scanf(
"%d"
,&n);
printf(
"A
代表为初始意中人群,
B
代表为潜力意中人群,
C
代表为目标意中人群
\n"
);
//A
代表为初始意中人,
B
代表为潜力意中人,
C
代表为目标意中人
char
x='A',y='B',z='C';
printf(
"
意中人发展情况如下
:\n "
);
hanoi(n,x,y,z);
printf(
"
恭喜小主,贺喜小主,七夕快乐
~ ~ ~\n "
);
}
瞧一瞧,看一看咯,看看我们的汉诺塔大人是怎么帮我们这位花痴同学解决这个难题的。。
结果分割线~~~~~~~~~~~~~~~
请输入意中人的个数:
4
A代表为初始意中人群,B代表为潜力意中人群,C代表为目标意中人群
意中人发展情况如下:
第1个:将1号意中人从A发展为B
第2个:将2号意中人从A发展为C
第3个:将1号意中人从B发展为C
第4个:将3号意中人从A发展为B
第5个:将1号意中人从C发展为A
第6个:将2号意中人从C发展为B
第7个:将1号意中人从A发展为B
第8个:将4号意中人从A发展为C
第9个:将1号意中人从B发展为C
第10个:将2号意中人从B发展为A
第11个:将1号意中人从C发展为A
第12个:将3号意中人从B发展为C
第13个:将1号意中人从A发展为B
第14个:将2号意中人从A发展为C
第15个:将1号意中人从B发展为C
恭喜小主,贺喜小主,七夕快乐~ ~ ~
恭喜小主,贺喜小主啊,解决了世纪难题,造福成千上万的。。。。。
在本猿兴致满满的将本猿的世纪算法上表给群里的各位大佬查看时,却招到了群里各位大佬的无情的嘲笑!!!what鬼啊!!!搞笑啊!!!我不要脸的吗???我的心愿是:世界和平啊!!!
诸位看官若赏脸前来本猿的小博一观,可否夸夸小猿呢?毕竟小猿还是一个好猿呢,嘿嘿嘿