rosebud
发表于 2005-3-8 10:14:04
<APPLET code=javaxqb.class codeBase=http://www.ccbridge.net/java/ height=440 width=372 archive="javaxqb.zip"><PARAM NAME="forecolor" VALUE="white"><PARAM NAME="backcolor" VALUE="green"><PARAM NAME="movelist" VALUE="38-37 52-56 37-33 13-14 33-32 31-30 32-31 56-55 57-56 55-53 56-54 53-52 54-53 30-20 31-30"><PARAM NAME="beginposition" VALUE="...Z..b..............P......p.S........sKSP....psk.b......Z..............................."></APPLET>
再来个大的
Aren4188
发表于 2005-7-28 16:50:12
<P>很同意<STRONG><FONT face=Verdana color=#da2549>hw294的意见.</FONT></STRONG></P>
<P><STRONG><FONT face=Verdana color=#da2549>刚好这个棋局我也走过,很有异曲同工之妙.</FONT></STRONG></P>
清风细语
发表于 2005-8-1 17:16:43
请楼主把分珍珠的原理写出来,我们学习学习,谢!
xinru
发表于 2005-9-4 09:58:18
<DIV class=quote><B>以下是引用<I>rosebud</I>在2005-3-8 10:14:04的发言:</B><br><APPLET code=javaxqb.class codeBase=http://www.ccbridge.net/java/ height=440 width=372 archive="javaxqb.zip"><PARAM NAME="forecolor" VALUE="white"><PARAM NAME="backcolor" VALUE="green"><PARAM NAME="movelist" VALUE="38-37 52-56 37-33 13-14 33-32 31-30 32-31 56-55 57-56 55-53 56-54 53-52 54-53 30-20 31-30"><PARAM NAME="beginposition" VALUE="...Z..b..............P......p.S........sKSP....psk.b......Z..............................."></APPLET> <br><br><br>再来个大的</DIV>
<br><br>
<P>我看可以在{数学、算术趣题}中发些象棋的题目让大家做做呀!!!</P>
[此贴子已经被作者于2005-9-4 10:01:18编辑过]
ggglgq
发表于 2005-11-25 09:31:44
<BR> 加精了。 <BR> <BR>
simpley
发表于 2005-12-12 14:18:20
<P><STRONG><FONT face=Verdana color=#000000>ggglgq先生:</FONT></STRONG></P>
<P><STRONG><FONT face=Verdana>您的<智取华山>游戏我怎么也通不过(只能玩到第5级),能不能请您讲一下详细的算法.谢谢.</FONT></STRONG></P>
ggglgq
发表于 2005-12-12 20:29:12
<P> <BR> simpley 先生的确很强!如果不知道《智娶华山》算法的奥妙,能<BR>玩到第 5 级已经相当不错了。</P>
<P>
<HR>
</P>
<P> 如果您玩楼主的游戏(或者本人的“追山妹”游戏)没问题的话,您<BR>应该知道她们的算法是“把每一行的特征值用“逻辑异或”加起来,如果<BR>是 0 ,则先走方输,否则先走方赢。” <BR> (注意:楼主的游戏要留意 1 1 1 、 1 1 及 1 的特殊情形。)</P>
<P> 同样《智娶华山》的每个单行都可以计算出一个特征值,对于连续的<BR> n 个洞来说,她们的特征值分别是:</P>
<P> 0: 0<BR> 1: 1<BR> 2: 2<BR> 3: 3<BR> 4: 1<BR> 5: 4<BR> 6: 3<BR> 7: 2<BR> 8: 1<BR> 9: 4<BR> 10:2<BR> 11:6<BR> 12:4<BR> 13:1<BR> 14:2<BR> 15:7<BR> 16:1<BR> 17:4<BR> 18:3<BR> 19:2<BR> 20:1<BR> 21:4<BR> 22:6<BR> ......</P>
<P><BR> 胜负的判断标准同样是:把每一行的特征值用“逻辑异或”加起来,<BR>如果是 0 ,则先走方输,否则先走方赢。 <BR> <BR> </P>
ggglgq
发表于 2005-12-12 20:30:43
<P> <BR> 下面举例说明特征值的计算方法:<BR> 每一行都可以计算出一个非负整数的特征值。举例,对于不长于 6 个<BR>的行来说:(表示方法: * 代表一个洞, 0 代表已经被填上的洞。 )</P>
<P> 000000 0 000<BR> *00000 1 001<BR> 0*0000 1 001<BR> **0000 2 010<BR> 00*000 1 001<BR> *0*000 0 000<BR> 0**000 2 010<BR> ***000 3 011<BR> 000*00 1 001<BR> *00*00 0 000<BR> 0*0*00 0 000<BR> **0*00 3 011<BR> 00**00 2 010<BR> *0**00 3 011<BR> 0***00 3 011<BR> ****00 1 001<BR> 0000*0 1 001<BR> *000*0 0 000<BR> 0*00*0 0 000<BR> **00*0 3 011<BR> 00*0*0 0 000<BR> *0*0*0 1 001<BR> 0**0*0 3 011<BR> ***0*0 2 010<BR> 000**0 2 010<BR> *00**0 3 011<BR> 0*0**0 3 011<BR> **0**0 0 000<BR> 00***0 3 011<BR> *0***0 2 010<BR> 0****0 1 001<BR> *****0 4 100<BR> 00000* 1 001<BR> *0000* 0 000<BR> 0*000* 0 000<BR> **000* 3 011<BR> 00*00* 0 000<BR> *0*00* 1 001<BR> 0**00* 3 011<BR> ***00* 2 010<BR> 000*0* 0 000<BR> *00*0* 1 001<BR> 0*0*0* 1 001<BR> **0*0* 2 010<BR> 00**0* 3 011<BR> *0**0* 2 010<BR> 0***0* 2 010<BR> ****0* 0 000<BR> 0000** 2 010<BR> *000** 3 011<BR> 0*00** 3 011<BR> **00** 0 000<BR> 00*0** 3 011<BR> *0*0** 2 010<BR> 0**0** 0 000<BR> ***0** 1 001<BR> 000*** 3 011<BR> *00*** 2 010<BR> 0*0*** 2 010<BR> **0*** 1 001<BR> 00**** 1 001<BR> *0**** 0 000<BR> 0***** 4 100<BR> ****** 3 011</P>
<P> 这里,第一列是行的状态,第二列是特征值的十进制表示,第三列是<BR>特征值的二进制表示。<BR> 整个游戏的特征值是每一行的特征值的逻辑异或的和。若其为 0,则<BR>先走方输,反之则先走方胜。取胜的方法就是选择一种走法,使得走完后<BR>的特征值为 0。这种走法是必然存在的。</P>
<P><BR> 法则一:如果一行被 0 分隔为若干个连续 * 号段,则该行的特征值是<BR>这些 * 号子段的特征值的逻辑异或之和。例如,*0**0* 这个串,被 0 分隔<BR>为三个子串:*,**,*,它们的特征值分别为 1,2,1,因此整个串的特征值<BR>是 1^2^1 = 2。<BR> 法则二:连续 * 号的特征值计算方法。 列出按照游戏方法对这行进行<BR>操作后所有可能的情况,这些操作后形成的串成为后继串。对每一个后继串<BR>计算特征值,这些特征值形成了一个集合,不在这个集合中的最小非负整数<BR>就是要求的特征值。 例如,** 这个串,可以按照游戏规则形成 *0,0*,00 <BR>三个后继串,他们的特征值分别为 1,1,0,因此不在这个集合中的非负的<BR>最小整数是 2,就是 ** 的特征值。</P>
<P> 由 法则一 和 法则二 可以计算出 0 ~ n 的特征值。<BR> <BR> </P>
simpley
发表于 2005-12-13 09:55:07
能否解释一下为什么5的特征值是4而不是1呢?
ggglgq
发表于 2005-12-13 18:54:40
<P> <br> 这个问题可以参考 20 楼,由 法则一 和 法则二 来求解 5 的<br>特征值。</P>
<P> 对于不长于 5 个的行来说,简单举例:</P>
<P> ***00 3 011<br><FONT color=#0000ff> ****0 1 001<br></FONT> ***0* 2 010<br> **00* 3 011<br> **0** 0 000</P>
<P> (表示方法: * 代表一个洞, 0 代表已经被填上的洞。这里仅举<br>个别几种特例,其它情况均等价以上几种情况。<FONT color=#0000ff>其中蓝色特征值为 <FONT size=6>1</FONT></FONT> )</P>
<P> 这里,第一列是行的状态,第二列是特征值的十进制表示,第三列<br>是特征值的二进制表示。</P>
<P><br> 不在这个集合中的非负的最小整数是 4 ,因此它就是 ***** 的<br>特征值,即洞数为 5 的 特征值 是 4 ,而非<FONT color=#0000ff> <FONT size=6>1</FONT></FONT>、2、3。</P>
<P> 同理,对于 20 楼,可以求解出洞数为 6 的特征值是 3 ,等等。<br> </P>
<P><br></P><br>
[此贴子已经被作者于2005-12-14 17:58:08编辑过]