zhh823543 发表于 2010-3-28 11:15

求首尾两次都是甲取子的取法种数?

<p>桌上有N枚棋子,甲乙二人轮流取子,每次限取1至2枚。求首尾两次都是甲取子的取法种数F(N)。</p><p>N是不超过30的正整数,在A2单元格,在B2单元格求出F(N)。</p><p>要求用函数解决,无辅助单元格,不用vba及自定义名称,答对每人奖励6金币</p><p><br/>注意:不要将其看作两个人在搏弈,而是两个人随机地取1至2枚,最后是求:出现“首尾两次都是甲取子”的所有情况之和。</p><p>3楼的结果是正确的,计算结果可用3楼的代码进行验证。</p><p>3楼的代码如下:</p><p>Function ct(c As Integer) As Long<br/>Dim i As Long<br/>igetct c, 0, "", "乙:", i, False<br/>ct = i<br/>End Function</p><p>Sub igetct(iby As Integer, isum As Long, sjoin As String, sName As String, iCount As Long, blnbycel As Boolean)<br/>Dim i As Integer<br/>If isum &gt; iby Then<br/>&nbsp;&nbsp; Exit Sub<br/>End If<br/>If isum = iby Then<br/>&nbsp;&nbsp;&nbsp; If sName = "甲:" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iCount = iCount + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Debug.Print sjoin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If blnbycel Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cells(iCount, "c") = sjoin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; Exit Sub<br/>End If<br/>For i = 1 To 2<br/>&nbsp;&nbsp;&nbsp; sName = IIf(sName = "甲:", "乙:", "甲:")<br/>&nbsp;&nbsp;&nbsp; igetct iby, isum + i, sjoin &amp; sName &amp; i &amp; " ", sName, iCount, blnbycel<br/>&nbsp;&nbsp;&nbsp; sName = IIf(sName = "甲:", "乙:", "甲:")<br/>Next<br/>End Sub<br/>Sub mget()<br/>Dim i As Long<br/>Dim iby As Integer<br/>iby = 10<br/>igetct iby, 0, "", "乙:", i, True<br/>MsgBox "棋量:" &amp; iby &amp; "&nbsp; " &amp; "解:" &amp; i<br/>End Sub</p>
[此贴子已经被作者于2010-4-9 21:18:50编辑过]

xiaoni 发表于 2010-3-28 21:32

<p>bu hui kan kan ba</p>

HYY514 发表于 2010-3-29 22:01

<p></p><p>有点意思,</p><p>B1=ct(A1)</p><p>**** Hidden Message *****

zhh823543 发表于 2010-3-29 22:09

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>HYY514</i>在2010-3-29 22:01:00的发言:</b><br/><p></p><p>有点意思,</p><p>B1=ct(A1)</p><p></p></div><p>&nbsp;结果正确</p><p>能用函数解决吗?</p>
[此贴子已经被作者于2010-3-29 22:25:24编辑过]

HYY514 发表于 2010-3-29 23:10

<p>上面代码中已有一个调用函数和一个调试程序,把代码复制到标准模块中,再在B1=CT((a1))</p><p>上面的代码是排列式的,如果你的条件是:</p><p>1。甲乙都为了争取最后一个拿走所有的棋。</p><p>2。甲先拿棋,每人每次只能拿一个或二个棋子。</p><p>求解甲胜利的所有解,就必须用以下代码:</p><p>当棋子是3时,第一个拿棋的人必输,所以当棋子3个以下时要甲胜则无解。</p><p>**** Hidden Message *****
[此贴子已经被作者于2010-3-29 23:25:05编辑过]

HYY514 发表于 2010-3-29 23:16

<p>这题有条件不够明确,有点矛盾,如果棋数不是最小局限的话,甲胜也必是建立在乙在少数量棋时失误的情况下,严格说说这题条件不完整,完全无解</p>
[此贴子已经被作者于2010-3-29 23:36:55编辑过]

zhh823543 发表于 2010-3-29 23:28

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>HYY514</i>在2010-3-29 23:10:00的发言:</b><br/><p>上面代码中已有一个调用函数和一个调试程序,把代码复制到标准模块中,再在B1=CT((a1))</p><p>上面的代码是排列式的,如果你的条件是:</p><p>1。甲乙都为了争取最后一个拿走所有的棋。</p><p>2。甲先拿棋,每人每次只能拿一个或二个棋子。</p><p>求解甲胜利的所有解,就必须用以下代码:</p><p>当棋子是3时,第一个拿棋的人必输,所以当棋子3个以下时要甲胜则无解。</p><p></p></div><p>题目理解有误,此题并非博弈,只是找出符合规则的所有可能性,甲乙只是随机地选择1个或2个,这里不讨论谁输谁赢,</p><p>ps:如果要规定最后拿完是赢的话,总棋子数只要不是3的倍数,必定第一个拿棋的人赢.</p>

HYY514 发表于 2010-3-29 23:38

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>zhh823543</i>在2010-3-29 23:28:00的发言:</b><br/><p>题目理解有误,此题并非博弈,只是找出符合规则的所有可能性,甲乙只是随机地选择1个或2个,这里不讨论谁输谁赢,</p><p>ps:如果要规定最后拿完是赢的话,总棋子数只要不是3的倍数,必定第一个拿棋的人赢.</p></div><p></p>正是

zhh823543 发表于 2010-3-29 23:45

<p>实际上在3楼已经回答正确了,不过没有按题目要求纯粹用公式解决</p>

zhh823543 发表于 2010-4-8 22:04

<p>用公式怎样解决呢?</p>
页: [1] 2
查看完整版本: 求首尾两次都是甲取子的取法种数?