九连环

王朝百科·作者佚名  2009-10-25  
宽屏版  字体: |||超大  

九连环

常见的九连环概况九连环是中国民间玩具。以金属丝制成9个圆环,将圆环套装在横板或各式框架上,并贯以环柄。游玩时,按照一定的程序反复操作,可使9个圆环分别解开,或合而为一。

九连环是一种流传于山西民间的智力玩具。它用九个圆环相连成串,以解开为胜。据明代杨慎《丹铅总录》记载,曾以玉石为材料制成两个互贯的圆环,“两环互相贯为一,得其关捩,解之为二,又合而为一”。后来,以铜或铁代替玉石,成为妇女儿童的玩具。它在中国差不多有二千年的历史,卓文君在给司马相如的信中有“九连环从中折断”的句子。清代,《红楼梦》中也有林黛玉巧解九连环的记载。周邦彦也留下关于九连环的名句“纵妙手、能解连环。”

九连环流行极广,形式多样,规格不一。其制作,用金属丝制成圆形小环九枚,九环相连,套在条形横板或各式框架上,其框柄有剑形、如意形、蝴蝶形、梅花形等,各环均以铜杆与之相接。玩时,依法使九环全部联贯子铜圈上,或经过穿套全部解下。其解法多样,可分可合,变化多端。得法者需经过81次上下才能将相连的九个环套入一柱,再用256次才能将九个环全部解下。此外,也可套成花篮、绣球、宫灯等状。

同时,九连环也是按照一种顺序来解的。解九连环需要相当一段时间,这也可以训练人的耐心。不仅如此,九连环还可以根据需要自行增加环数提高难度,但环数增加将使解开步骤呈几何级数递增,且本质上并没有改变解环方法,因此通常所见仍是九环为主。

西汉才女,辞赋家司马相如之妻卓文君曾提及九连环:……,七弦琴无心弹,八行书无可传,九连环从中折断,十里长亭望眼欲穿;百思想,千怀念,万般无奈把郎怨。……

卓文君生於西汉,诸葛亮生於东汉末年,其时汉室江山已分崩离析。二人相差几百年。也就是说,在诸葛亮之前几百年的西汉,九连环已经存在。故“九连环由诸葛亮发明”之说并不正确,可能系後世误传。

今天,解九连环的世界纪录是237秒,由中国人王仲彬创造

九连环的拆解原理解开九连环共需要256步,只要上或下一个环,就算一步,不是在框架上滑动。希望大家能够通过独立思考,解决这个问题。九连环的解下和套上是一对逆过程。

九连环的每个环互相制约,只有第一环能够自由上下。要想下/上第n个环,就必须满足两个条件,第一个环除外。一、第n-1个环在架上;二、第n-1个环前面的环全部不在架上。玩九连环就是要努力满足上面的两个条件。解下九连环本质上要从后面的环开始下,而先下前面的环,是为了下后面的环,前面的环还要装上,不算是真正地取下来。

要想解下第九环,必须满足以下两个条件:第九环在架上;而第一~八环全部不在架上。在初始状态,前者是满足的,现在要满足后者。照这样推理,就要下第七八环,一直推出要下第一环,而不是下第二环。先下第二环是偶数连环的解法。上下第二环后就要上下第一环,所以在实际操作中就同时上下第一、二环,这是两步。

九连环在任何正常状态时,都只有两条路可走:上某环和下某环,别的环动不了。其中一条路是刚才走过来的,不能重复走,否则就弄回去了。这样,就会迫使连环者去走正确的道路。而很多人由于不熟悉,常走回头路,解不了九连环。首次解九连环要多思考,三个环上下的动作要练熟,记住上中有下,下中有上。熟练后会有更深刻的理解,不需要推理了。

最难的九连环的形式是只有9环在上,需512步全解下。

具体拆解方法:把框架和九个圆环分开,如左手持框架柄,右手握环,从右到左编号为1-9将环套入框架为“上”,取出为“下”。

九连环拆解共341步:

下9:

下1(结果98765432在上):下1

下3(结果987654在上):下3上1下12

下5(结果9876在上):下5上12下1上3上1下12下4上12下1下3上1下12

下7(结果98在上):下7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

下9(结果8在上):下9;

九连环
九连环的解法

下8:

上2(结果82在上):上12下1

上3(结果83在上):上3上1下12

上4(结果84在上):上4上12下1下3上1下12

上5(结果85在上):上5上12下1上3上1下12下4上12下1下3上1下12

上6(结果86在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

上7(结果87在上):上7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

下8(结果7在上):下8;

下7:

上2(结果72在上):上12下1

上3(结果73在上):上3上1下12

上4(结果74在上):上4上12下1下3上1下12

上5(结果75在上):上5上12下1上3上1下12下4上12下1下3上1下12

上6(结果76在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

下7(结果6在上):下7;

下6:

上2(结果62在上):上12下1

上3(结果63在上):上3上1下12

上4(结果64在上):上4上12下1下3上1下12

上5(结果65在上):上5上12下1上3上1下12下4上12下1下3上1下12

下6(结果5在上):下6;

下5:

上2(结果52在上):上12下1

上3(结果53在上):上3上1下12

上4(结果54在上):上4上12下1下3上1下12

下5(结果4在上):下5;

下4:

上2(结果42在上):上12下1

上3(结果43在上):上3上1下12

下4(结果3在上):下4;

下3:

上2(结果32在上):上12下1

下3(结果2在上):下3;

下12:

下12(结果拆解完成):上1下12。

九连环安装共341步:

上98:

上2(结果2在上):上12下1

上3(结果3在上):上3上1下12

上4(结果4在上):上4上12下1下3上1下12

上5(结果5在上):上5上12下1上3上1下12下4上12下1下3上1下12

上6(结果6在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

上7(结果7在上):上7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

上8(结果8在上):上8上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12下7上12下1上3上1下12上4上12下1下3上1下12上5上12下1上3上1下12下4上12下1下3上1下12下6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

上9(结果98在上):上9

上76:

九连环
九连环的解法

上2(结果982在上):上12下1

上3(结果983在上):上3上1下12

上4(结果984在上):上上4上12下1下3上1下12

上5(结果985在上):上5上12下1上3上1下12下4上12下1下3上1下12

上6(结果986在上):上6上12下1上3上1下12上4上12下1下3上1下12下5上12下1上3上1下12下4上12下1下3上1下12

上7(结果9876在上):上7

上54:

上2(结果98762在上):上12下1

上3(结果98763在上):上3上1下12

上4(结果98764在上):上4上12下1下3上1下12

上5(结果987654在上):上5

上32:

上2(结果9876542在上):上12下1

上3(结果9876532在上):上3

上1:

上1(结果安装完成):上1。

红楼梦中的九连环第八回:比通灵金莺微露意,探宝钗黛玉半含酸。

九连环

开头说了点儿贾母去宁府看戏的事,不过是起个头儿。宝玉送贾母回来,本想还看戏的,

“想起近日薛宝钗在家养病,未去亲候,意欲去望他一望”——这是有伏笔的,前一回宝

玉和黛玉玩九连环时,听说宝钗身上不大好,便吩咐丫头去看望,“论理我该亲自来的,

就说才从学里来,也着了些凉,异日再亲自来看。

九连环步骤计算九连环是中国民间玩具。规定环在杆上用1表示,环在下面用0表示。规定最左边的环是可以任意上下的那一环,输出数据中最右边必须是1,也就是说,010100要写成0101。

现在是X连环,由于“输出数据中最右边必须是1” ,所以X可以理解为无限大,右边多余的0在输出时都省略。初始化各环都是0,以下是前9步的情况:

1 1

2 11

3 01

4 011

5 111

6 101

7 001

8 0011

9 1011

问在X连环装上过程中,第n步完成后,具体情况是怎么样的。

答案:将n转化为二进制,求其格雷码。将二进制的格雷码逆序输出,即得具体情况。

注意:这个算法揭示了传统的九连环与现代的格雷码的重要关系!

程序实现(C语言):

#include<stdio.h>

main()

{ __int64 n;

int a[70]=,num=0,i;

scanf("%I64d",&n);

if(n==0)

{ printf("0");

return 0;

}

while(n>0)

{ a[num++]=n%2;

n/=2;

}

for(i=0;i<num;i++)

a=a^a[i+1];

while(a[num]==0)

num--;

for(i=0;i<=num;i++)

printf("%d",a);

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有