private: char _ChessBoard[N 1][N 1]; };为啥错了
- 教育综合
- 2024-12-15 07:57:34
在线等解答
桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,有的抽屉可以放一个,有的可以放两个,有的可以放五个,但最终我们会发现至少我们可以找到一个抽屉里面至少放两个苹果。这一现象就是我们所说的抽屉原理。抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1或多于n+1个元素放到n个集合中去,其中必定至少有一个集合里至少有两个元素。”
抽屉原理有时也被称为鸽巢原理(“如果有五个鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2只鸽子”)。它是德国数学家狄利克雷首先明确的提出来并用以证明一些数论中的问题,因此,也称为狄利克雷原理。它是组合数学中一个重要的原理。
一. 抽屉原理最常见的形式
原理1 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里有2个或2个以上的物体。
[证明](反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是n,而不是题设的n+k(k≥1),这不可能.
原理2 把多于mn(m乘以n)个的物体放到n个抽屉里,则至少有一个抽屉里有m+1个或多于m+1个的物体。
[证明](反证法):若每个抽屉至多放进m个物体,那么n个抽屉至多放进mn个物体,与题设不符,故不可能.
原理1 2都是第一抽屉原理的表述
第二抽屉原理:
把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体。
[证明](反证法):若每个抽屉都有不少于m个物体,则总共至少有mn个物体,与题设矛盾,故不可能
二.应用抽屉原理解题
抽屉原理的内容简明朴素,易于接受,它在数学问题中有重要的作用。许多有关存在性的证明都可用它来解决。
例1:400人中至少有两个人的生日相同.
解:将一年中的366天视为366个抽屉,400个人看作400个物体,由抽屉原理1可以得知:至少有两人的生日相同.
又如:我们从街上随便找来13人,就可断定他们中至少有两个人属相相同.
“从任意5双手套中任取6只,其中至少有2只恰为一双手套。”
“从数1,2,...,10中任取6个数,其中至少有2个数为奇偶性不同。”
例2: 幼儿园买来了不少白兔、熊猫、长颈鹿塑料玩具,每个小朋友任意选择两件,那么不管怎样挑选,在任意七个小朋友中总有两个彼此选的玩具都相同,试说明道理.
解 :从三种玩具中挑选两件,搭配方式只能是下面六种:(兔、兔),(兔、熊猫),(兔、长颈鹿),(熊猫、熊猫),(熊猫、长颈鹿),(长颈鹿、长颈鹿)。把每种搭配方式看作一个抽屉,把7个小朋友看作物体,那么根据原理1,至少有两个物体要放进同一个抽屉里,也就是说,至少两人挑选玩具采用同一搭配方式,选的玩具相同.
上面数例论证的似乎都是“存在”、“总有”、“至少有”的问题,不错,这正是抽屉原则的主要作用.(需要说明的是,运用抽屉原则只是肯定了“存在”、“总有”、“至少有”,却不能确切地指出哪个抽屉里存在多少.)
抽屉原理虽然简单,但应用却很广泛,它可以解答很多有趣的问题,其中有些问题还具有相当的难度。下面我们来研究有关的一些问题。
(一) 整除问题
把所有整数按照除以某个自然数m的余数分为m类,叫做m的剩余类或同余类,用[0],[1],[2],…,[m-1]表示.每一个类含有无穷多个数,例如[1]中含有1,m+1,2m+1,3m+1,….在研究与整除有关的问题时,常用剩余类作为抽屉.根据抽屉原理,可以证明:任意n+1个自然数中,总有两个自然数的差是n的倍数。
例1 证明:任取8个自然数,必有两个数的差是7的倍数。
分析与解答 在与整除有关的问题中有这样的性质,如果两个整数a、b,它们除以自然数m的余数相同,那么它们的差a-b是m的倍数.根据这个性质,本题只需证明这8个自然数中有2个自然数,它们除以7的余数相同.我们可以把所有自然数按被7除所得的7种不同的余数0、1、2、3、4、5、6分成七类.也就是7个抽屉.任取8个自然数,根据抽屉原理,必有两个数在同一个抽屉中,也就是它们除以7的余数相同,因此这两个数的差一定是7的倍数。
例2:对于任意的五个自然数,证明其中必有3个数的和能被3整除.
证明∵任何数除以3所得余数只能是0,1,2,不妨分别构造为3个抽屉:
[0],[1],[2]
①若这五个自然数除以3后所得余数分别分布在这3个抽屉中(即抽屉中分别为含有余数为0,1,2的数),我们从这三个抽屉中各取1个(如1~5中取3,4,5),其和(3+4+5=12)必能被3整除.
②若这5个余数分布在其中的两个抽屉中,则其中必有一个抽屉,包含有3个余数(抽屉原理),而这三个余数之和或为0,或为3,或为6,故所对应的3个自然数之和是3的倍数.
③若这5个余数分布在其中的一个抽屉中,很显然,必有3个自然数之和能被3整除.
例2′:对于任意的11个整数,证明其中一定有6个数,它们的和能被6整除.
证明:设这11个整数为:a1,a2,a3……a11 又6=2×3
①先考虑被3整除的情形
由例2知,在11个任意整数中,必存在:
3|a1+a2+a3,不妨设a1+a2+a3=b1;
同理,剩下的8个任意整数中,由例2,必存在:3 | a4+a5+a6.设a4+a5+a6=b2;
同理,其余的5个任意整数中,有:3|a7+a8+a9,设:a7+a8+a9=b3
②再考虑b1、b2、b3被2整除.
依据抽屉原理,b1、b2、b3这三个整数中,至少有两个是同奇或同偶,这两个同奇(或同偶)的整数之和必为偶数.不妨设2|b1+b2
则:6|b1+b2,即:6|a1+a2+a3+a4+a5+a6
∴任意11个整数,其中必有6个数的和是6的倍数.
例3: 任意给定7个不同的自然数,求证其中必有两个整数,其和或差是10的倍数.
分析:注意到这些数队以10的余数即个位数字,以0,1,…,9为标准制造10个抽屉,标以[0],[1],…,[9].若有两数落入同一抽屉,其差是10的倍数,只是仅有7个自然数,似不便运用抽屉原则,再作调整:[6],[7],[8],[9]四个抽屉分别与[4],[3],[2],[1]合并,则可保证至少有一个抽屉里有两个数,它们的和或差是10的倍数.
(二)面积问题
例:九条直线中的每一条直线都将正方形分成面积比为2:3的梯形,证明:这九条直线中至少有三条经过同一点.
证明:如图,设直线EF将正方形分成两个梯形,作中位线MN。由于这两个梯形的高相等, 故它们的面积之比等于中位线长的比,即|MH|:|NH| 。于是点H有确定的位置(它在正方形一对对边中点的连线上,且|MH|:|NH|=2:3). 由几何上的对称性,这种点共有四个(即图中的H、J、I、K).已知的九条适合条件的分割直线中的每一条必须经过H、J、I、K这四点中的一点.把H、J、I、K看成四个抽屉,九条直线当成9个物体,即可得出必定有3条分割线经过同一点.
(三)染色问题
例1正方体各面上涂上红色或蓝色的油漆(每面只涂一种色),证明正方体一定有三个面颜色相同.
证明:把两种颜色当作两个抽屉,把正方体六个面当作物体,那么6=2×2+2,根据原理二,至少有三个面涂上相同的颜色.
例2 有5个小朋友,每人都从装有许多黑白围棋子的布袋中任意摸出3枚棋子.请你证明,这5个人中至少有两个小朋友摸出的棋子的颜色的配组是一样的。
分析与解答 首先要确定3枚棋子的颜色可以有多少种不同的情况,可以有:3黑,2黑1白,1黑2白,3白共4种配组情况,看作4个抽屉.根据抽屉原理,至少有两个小朋友摸出的棋子的颜色在同一个抽屉里,也就是他们所拿棋子的颜色配组是一样的。
例3:假设在一个平面上有任意六个点,无三点共线,每两点用红色或蓝色的线段连起来,都连好后,问你能不能找到一个由这些线构成的三角形,使三角形的三边同色?
解:首先可以从这六个点中任意选择一点,然后把这一点到其他五点间连五条线段,如图,在这五条线段中,至少有三条线段是同一种颜色,假定是红色,现在我们再单独来研究这三条红色的线。这三条线段的另一端或许是不同颜色,假设这三条线段(虚线)中其中一条是红色的,那么这条红色的线段和其他两条红色的线段便组成了我们所需要的同色三角形,如果这三条线段都是蓝色的,那么这三条线段也组成我们所需要的同色三角形。因而无论怎样着色,在这六点之间的所有线段中至少能找到一个同色三角形。
例3′(六人集会问题)证明在任意6个人的集会上,或者有3个人以前彼此相识,或者有三个人以前彼此不相识。”
例3”:17个科学家中每个人与其余16个人通信,他们通信所讨论的仅有三个问题,而任两个科学家之间通信讨论的是同一个问题。证明:至少有三个科学家通信时讨论的是同一个问题。
解:不妨设A是某科学家,他与其余16位讨论仅三个问题,由鸽笼原理知,他至少与其中的6位讨论同一问题。设这6位科学家为B,C,D,E,F,G,讨论的是甲问题。
若这6位中有两位之间也讨论甲问题,则结论成立。否则他们6位只讨论乙、丙两问题。这样又由鸽笼原理知B至少与另三位讨论同一问题,不妨设这三位是C,D,E,且讨论的是乙问题。
若C,D,E中有两人也讨论乙问题,则结论也就成立了。否则,他们间只讨论丙问题,这样结论也成立。
三.制造抽屉是运用原则的一大关键
例1 从2、4、6、…、30这15个偶数中,任取9个数,证明其中一定有两个数之和是34。
分析与解答 我们用题目中的15个偶数制造8个抽屉:
凡是抽屉中有两个数的,都具有一个共同的特点:这两个数的和是34。现从题目中的15个偶数中任取9个数,由抽屉原理(因为抽屉只有8个),必有两个数在同一个抽屉中.由制造的抽屉的特点,这两个数的和是34。
例2:从1、2、3、4、…、19、20这20个自然数中,至少任选几个数,就可以保证其中一定包括两个数,它们的差是12。
分析与解答在这20个自然数中,差是12的有以下8对:{20,8},{19,7},{18,6},{17,5},{16,4},{15,3},{14,2},{13,1}。
另外还有4个不能配对的数{9},{10},{11},{12},共制成12个抽屉(每个括号看成一个抽屉).只要有两个数取自同一个抽屉,那么它们的差就等于12,根据抽屉原理至少任选13个数,即可办到(取12个数:从12个抽屉中各取一个数(例如取1,2,3,…,12),那么这12个数中任意两个数的差必不等于12)。
例3: 从1到20这20个数中,任取11个数,必有两个数,其中一个数是另一个数的倍数。
分析与解答 根据题目所要求证的问题,应考虑按照同一抽屉中,任意两数都具有倍数关系的原则制造抽屉.把这20个数按奇数及其倍数分成以下十组,看成10个抽屉(显然,它们具有上述性质):
{1,2,4,8,16},{3,6,12},{5,10,20},{7,14},{9,18},{11},{13},{15},{17},{19}。
从这10个数组的20个数中任取11个数,根据抽屉原理,至少有两个数取自同一个抽屉.由于凡在同一抽屉中的两个数都具有倍数关系,所以这两个数中,其中一个数一定是另一个数的倍数。
例4:某校校庆,来了n位校友,彼此认识的握手问候.请你证明无论什么情况,在这n个校友中至少有两人握手的次数一样多。
分析与解答 共有n位校友,每个人握手的次数最少是0次,即这个人与其他校友都没有握过手;最多有n-1次,即这个人与每位到会校友都握了手.然而,如果有一个校友握手的次数是0次,那么握手次数最多的不能多于n-2次;如果有一个校友握手的次数是n-1次,那么握手次数最少的不能少于1次.不管是前一种状态0、1、2、…、n-2,还是后一种状态1、2、3、…、n-1,握手次数都只有n-1种情况.把这n-1种情况看成n-1个抽屉,到会的n个校友每人按照其握手的次数归入相应的“抽屉”,根据抽屉原理,至少有两个人属于同一抽屉,则这两个人握手的次数一样多。
在有些问题中,“抽屉”和“物体”不是很明显的,需要精心制造“抽屉”和“物体”.如何制造“抽屉”和“物体”可能是很困难的,一方面需要认真地分析题目中的条件和问题,另一方面需要多做一些题积累经验。
抽屉原理
把八个苹果任意地放进七个抽屉里,不论怎样放,至少有一个抽屉放有两个或两个以上的苹果。抽屉原则有时也被称为鸽巢原理,它是德国数学家狄利克雷首先明确的提出来并用以证明一些数论中的问题,因此,也称为狄利克雷原则。它是组合数学中一个重要的原理。把它推广到一般情形有以下几种表现形式。
形式一:证明:设把n+1个元素分为n个集合A1,A2,…,An,用a1,a2,…,an表示这n个集合里相应的元素个数,需要证明至少存在某个ai大于或等于2(用反证法)假设结论不成立,即对每一个ai都有ai<2,则因为ai是整数,应有ai≤1,于是有:
a1+a2+…+an≤1+1+…+1=n<n+1这与题设矛盾。所以,至少有一个ai≥2,即必有一个集合中含有两个或两个以上的元素。
形式二:设把n•m+1个元素分为n个集合A1,A2,…,An,用a1,a2,…,an表示这n个集合里相应的元素个数,需要证明至少存在某个ai大于或等于m+1。用反证法)假设结论不成立,即对每一个ai都有ai<m+1,则因为ai是整数,应有ai≤m,于是有:
a1+a2+…+an≤m+m+…+m=n•m<n•m+1
n个m 这与题设相矛盾。所以,至少有存在一个ai≥m+1
高斯函数:对任意的实数x,[x]表示“不大于x的最大整数”.
例如:[3.5]=3,[2.9]=2,[-2.5]=-3,[7]=7,……一般地,我们有:[x]≤x<[x]+1
形式三:证明:设把n个元素分为k个集合A1,A2,…,Ak,用a1,a2,…,ak表示这k个集合里相应的元素个数,需要证明至少存在某个ai大于或等于[n/k]。(用反证法)假设结论不成立,即对每一个ai都有ai<[n/k],于是有:
a1+a2+…+ak<[n/k]+[n/k]+…+[n/k] =k•[n/k]≤k•(n/k)=n
k个[n/k] ∴ a1+a2+…+ak<n 这与题设相矛盾。所以,必有一个集合中元素个数大于或等于[n/k]
形式四:证明:设把q1+q2+…+qn-n+1个元素分为n个集合A1,A2,…,An,用a1,a2,…,an表示这n个集合里相应的元素个数,需要证明至少存在某个i,使得ai大于或等于qi。(用反证法)假设结论不成立,即对每一个ai都有ai<qi,因为ai为整数,应有ai≤qi-1,于是有:a1+a2+…+an≤q1+q2+…+qn-n <q1+q2+…+qn-n+1这与题设矛盾。
所以,假设不成立,故必有一个i,在第i个集合中元素个数ai≥qi
形式五:证明:(用反证法)将无穷多个元素分为有限个集合,假设这有限个集合中的元素的个数都是有限个,则有限个有限数相加,所得的数必是有限数,这就与题设产生矛盾,所以,假设不成立,故必有一个集合含有无穷多个元素。
例题1:400人中至少有两个人的生日相同.分析:生日从1月1日排到12月31日,共有366个不相同的生日,我们把366个不同的生日看作366个抽屉,400人视为400个苹果,由表现形式1可知,至少有两人在同一个抽屉里,所以这400人中有两人的生日相同.
解:将一年中的366天视为366个抽屉,400个人看作400个苹果,由抽屉原理的表现形式1可以得知:至少有两人的生日相同.
例题2:任取5个整数,必然能够从中选出三个,使它们的和能够被3整除.
证明:任意给一个整数,它被3除,余数可能为0,1,2,我们把被3除余数为0,1,2的整数各归入类r0,r1,r2.至少有一类包含所给5个数中的至少两个.因此可能出现两种情况:1°.某一类至少包含三个数;2°.某两类各含两个数,第三类包含一个数.
若是第一种情况,就在至少包含三个数的那一类中任取三数,其和一定能被3整除;若是第二种情况,在三类中各取一个数,其和也能被3整除..综上所述,原命题正确.
例题3:某校派出学生204人上山植树15301株,其中最少一人植树50株,最多一人植树100株,则至少有5人植树的株数相同.
证明:按植树的多少,从50到100株可以构造51个抽屉,则个问题就转化为至少有5人植树的株数在同一个抽屉里.
(用反证法)假设无5人或5人以上植树的株数在同一个抽屉里,那只有5人以下植树的株数在同一个抽屉里,而参加植树的人数为204人,所以,每个抽屉最多有4人,故植树的总株数最多有:
4(50+51+…+100)=4× =15300<15301得出矛盾.因此,至少有5人植树的株数相同.
练习:1.边长为1的等边三角形内有5个点,那么这5个点中一定有距离小于0.5的两点.
2.边长为1的等边三角形内,若有n2+1个点,则至少存在2点距离小于 .
3.求证:任意四个整数中,至少有两个整数的差能够被3整除.
4.某校高一某班有50名新生,试说明其中一定有二人的熟人一样多.
5.某个年级有202人参加考试,满分为100分,且得分都为整数,总得分为10101分,则至少有3人得分相同.
“任意367个人中,必有生日相同的人。”
“从任意5双手套中任取6只,其中至少有2只恰为一双手套。”
“从数1,2,...,10中任取6个数,其中至少有2个数为奇偶性不同。”
... ...
大家都会认为上面所述结论是正确的。这些结论是依据什么原理得出的呢?这个原理叫做抽屉原理。它的内容可以用形象的语言表述为:
“把m个东西任意分放进n个空抽屉里(m>n),那么一定有一个抽屉中放进了至少2个东西。”
在上面的第一个结论中,由于一年最多有366天,因此在367人中至少有2人出生在同月同日。这相当于把367个东西放入 366个抽屉,至少有2个东西在同一抽屉里。在第二个结论中,不妨想象将5双手套分别编号,即号码为1,2,...,5的手套各有两只,同号的两只是一双。任取6只手套,它们的编号至多有5种,因此其中至少有两只的号码相同。这相当于把6个东西放入5个抽屉,至少有2个东西在同一抽屉里。
抽屉原理的一种更一般的表述为:
“把多于kn+1个东西任意分放进n个空抽屉(k是正整数),那么一定有一个抽屉中放进了至少k+1个东西。”
利用上述原理容易证明:“任意7个整数中,至少有3个数的两两之差是3的倍数。”因为任一整数除以3时余数只有0、1、2三种可能,所以7个整数中至少有3个数除以3所得余数相同,即它们两两之差是3的倍数。
如果问题所讨论的对象有无限多个,抽屉原理还有另一种表述:
“把无限多个东西任意分放进n个空抽屉(n是自然数),那么一定有一个抽屉中放进了无限多个东西。”
抽屉原理的内容简明朴素,易于接受,它在数学问题中有重要的作用。许多有关存在性的证明都可用它来解决。
1958年6/7月号的《美国数学月刊》上有这样一道题目:
“证明在任意6个人的集会上,或者有3个人以前彼此相识,或者有三个人以前彼此不相识。”
这个问题可以用如下方法简单明了地证出:
在平面上用6个点A、B、C、D、E、F分别代表参加集会的任意6个人。如果两人以前彼此认识,那么就在代表他们的两点间连成一条红线;否则连一条蓝线。考虑A点与其余各点间的5条连线AB,AC,...,AF,它们的颜色不超过2种。根据抽屉原理可知其中至少有3条连线同色,不妨设AB,AC,AD同为红色。如果BC,BD ,CD 3条连线中有一条(不妨设为BC)也为红色,那么三角形ABC即一个红色三角形,A、B、C代表的3个人以前彼此相识:如果BC、BD、CD 3条连线全为蓝色,那么三角形BCD即一个蓝色三角形,B、C、D代表的3个人以前彼此不相识。不论哪种情形发生,都符合问题的结论。
六人集会问题是组合数学中著名的拉姆塞定理的一个最简单的特例,这个简单问题的证明思想可用来得出另外一些深入的结论。这些结论构成了组合数学中的重要内容-----腊姆塞理论。从六人集会问题的证明中,我们又一次看到了抽屉原理的应用。
char*p <=>a[] 那么p=a[0] (p+1)=a[1]?
题目不知道你是不是打错了如果有 char a[N]; char *p = a; 那么 :
p 等价于 a 等价于 a+0 等价于 &a[0]
p+1 等价于 a+1 等价于 &a[1]
努力了一晚上编了个简单下棋程序,居然运行时出现了IIOException,到 底错哪了,地址没错
现在Swing特别少见,工作好多年都没见人用过,你看看逻辑关系有没有错误,循环 判断都有可能,swing确实没怎么了解过c语言一个程序 代码如下哈 为什么姓名和学号输的时候输了一个后面就全出来了不像成绩一样一个一个的跳
我没细看,不过其中估计有这个问题%c 会读取键盘的所有输入,当然包括换行符也就是回车
汉诺塔问题公式是什么?
汉诺塔问题(又称河内塔问题)是根据一个传说形成的一个问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
1. 每次只能移动一个圆盘;
2. 大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
一般取N=64。这样,最少需移动264-1次。即如果一秒钟能移动一块圆盘,仍将需5845.54亿年。目前按照宇宙大爆炸理论的推测,宇宙的年龄仅为137亿年。
在真实玩具中,一般N=8;这将需移动255次。如果N=10,需移动1023次。如果N=15,需移动32767次;这就是说,如果一个人从3岁到99岁,每天移动一块圆盘,他仅能移动15块。如果N=20,需移动1048575次,即超过了一百万次。
先看hanoi(1, one, two, three)的情况。这时直接将one柱上的一个盘子搬到three柱上。注意,这里one柱或three柱到底是A、B还是C并不重要,要记住的是函数第二个参数代表的柱上的一个盘被搬到第四个参数代表的柱上。为方便,将这个动作记为:
one =》three
再看hanoi(2, one, two, three)的情况。考虑到hanoi(1)的情况已经分析过了,可知这时实际上将产生三个动作,分别是:
one =》two
one =》three
two =》three
很显然,这实际上相当于将one柱上的两个盘直接搬到three柱上。
再看hanoi(3, one, two, three)的情况。分析
hanoi(2, one , three, two)
one =》three
hanoi(2, two, one, three)
即:先将one柱上的两个盘搬到two柱上,再将one柱上的一个盘搬到three柱上,最后再将two柱上的两个盘搬到three柱上。这不就等于将one柱上的三个盘直接搬到three柱上吗?
运用归纳法可知,对任意n,
hanoi(n-1, one , three, two)
one =》three
hanoi(n-1, two, one, three)
就是先将one柱上的n-1个盘搬到two柱上,再将one柱上的一个盘搬到three柱上,最后再将two柱上的n-1个盘搬到three柱上。这就是我们所需要的结果!
回答者:wuchenghua121 - 经理 四级 12-5 11:51
汉诺塔
汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请自己运行计算,程序见尾部。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。
后来,这个传说就演变为汉诺塔游戏:
1.有三根杆子A,B,C。A杆上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移到C杆上
经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
此外,汉诺塔问题也是程序设计中的经典递归问题。
补充:汉诺塔的算法实现(c++)
#include
#include
using namespace std;
ofstream fout("out.txt");
void Move(int n,char x,char y)
{
fout<<"把"<
void Hannoi(int n,char a,char b,char c)
{
if(n==1)
Move(1,a,c);
else
{
Hannoi(n-1,a,c,b);
Move(n,a,c);
Hannoi(n-1,b,a,c);
}
}
int main()
{
fout<<"以下是7层汉诺塔的解法:"<
fout.close();
cout<<"输出完毕!"<
}
C语言精简算法
/* Copyrighter by SS7E */
#include
void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */
{
if(n==1)
{
printf("Move disk %d from %c to %c\n",n,A,C);
}
else
{
hanoi(n-1,A,C,B); /* Copyrighter by SS7E */
printf("Move disk %d from %c to %c\n",n,A,C);
hanoi(n-1,B,A,C); /* Copyrighter by SS7E */
}
}
main() /* Copyrighter by SS7E */
{
int n;
printf("请输入数字n以解决n阶汉诺塔问题:\n");
scanf("%d",&n);
hanoi(n,'A','B','C');
}/* Copyrighter by SS7E */
回答者: Vanquisher_ - 举人 五级 12-5 13:57
parcel::::::::::
program hanoi;
functionhanoi(x:integer):longint;
begin
if x=1 then hanoi:=1;
if x=2 then hanoi:=3;
else
begin
hanoi:=2*hanoi(x-1)+1;
end;
end;
begin
read(x){第几个数 }
write(hanoi(x));
end.
思想就是:第N个就等于第n-1个乘以2+1次
展开全文阅读