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>您的&lt;智取华山&gt;游戏我怎么也通不过(只能玩到第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编辑过]
页: 1 [2] 3 4
查看完整版本: 分珍珠