发财法老游戏王法老王卡组里面一把最高可以获取多少游戏王法老王卡组硬币?

账号 电子邮箱地址
记住登录状态
还没有33IQ账号?
通过社交网站直接登录
条@我的评论,
条新私信,
条新评论,
21:36 提供
考虑一个双人。在一个圆桌上进行。每个者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方放置新的硬币,谁就输了。的先行者还是后行者有必胜策略?这种策略是什么?(放硬币的时,不能移动已放置的硬币)
您也可能感兴趣的题目
m.33iq.com
登录33IQ,提升智力水平,让你越玩越聪明!
33IQ v4.26.90.95
Copyright & iq.com All Rights Reserved电路设计、嵌入式编程、算法。。。
一个硬币移动游戏的求解算法
这个游戏我是在光荣出的大航海时代威力加强版一个蛮古老的单机版游戏)上第一次见到的。与其说是个游戏,不如说是个智力题。这个题目是这样的:
有个硬币,三个正面,两个反面,最初是间隔排列的,如图所示。
图 1 五枚硬币的原始排列
每次移动只能移动相邻的个不同的硬币,也就是移动的这两个硬币一定要一个是正面一个是反面,并且两个硬币是相邻的。可以向左或向右移动,但是移动的那个方向上必须有相邻的硬币。移动时还要跨过相邻的硬币。举个例子,比如第、两枚硬币可以向右移动,但是不可以向左移动,因为左边没有相邻的硬币。向右移动时要跨过右边所有相互挨着的硬币,如图所示。
图 2 移动前两个硬币
如果移动方向上硬币是不连续的,则只能移动到第一个可以放硬币的地方,比如下面的例子,要将从左边数第、第两枚硬币向左边移动,则只能移动到中间的空位,不能跳过空位移到最左边,如图所示。
图 3 另一个移动的例子
最终的目标是要移动成正的在一边,反的在另一边。
图 4 最终的目标
这个问题看似蛮简单的,但真正做起来就发现还是挺难的。我试了好久才找到答案。
但是这个题用计算机来解算却并不难,并且非常适于用递归算法来解算。下面是我编写的程序,因为这个程序的计算量不大,所以基本没有考虑计算效率问题,而是使程序尽量的简单、直白。
程序中用了个字符串来存放这些硬币的信息,’A’ 表示正面,’B’ 表示反面,空格表示空位。因此,字符串初始化为:。挪动硬币对应的就是改变字符串中的位置。相关的挪动硬币的操作放到了函数中。函数中传进一个整型参数 ,用来标识当前挪动的是哪两个硬币,向左挪动还是向右挪动。具体方法为,的最低的一个表示挪动方向,换句话说当为偶数时表示向左挪动,为奇数时表示向右挪动硬币。的其余表示当前挪动的是哪两个硬币。函数的返回值表示这次挪动是否成功了。
具体代码如下
static bool move(string &coins, int i)
int dir = i % 2; // 0 表示左移,1 表示右移
i = i / 2;
if(coins[i] == ' ' || coins[i + 1] == ' ' || coins[i] == coins[i + 1])
//无法移动当前硬币
if( dir == 0 ) //向左移
if( coins[ i - 1] == ' ') //左边无硬币,不能移动
string::size_type j = i - 2;
while( coins[j] != ' ' && j & 1) {j --;}
coins[j - 1] = coins[i];
coins[j] = coins[i + 1];
coins[i] = ' ';
coins[i + 1] = ' ';
if( coins[i + 2] == ' ') //右边无硬币,不能移动
string::size_type j = i + 3;
while(coins[j] != ' ' && j & coins.size() - 1) {j ++;}
coins[j] = coins[i];
coins[j + 1] = coins[i + 1];
coins[i] = ' ';
coins[i + 1] = ' ';
}isSeperated 函数判断是否将硬币分开了,算法很简单,肯定有更高效的算法,我没有在这上面多花心思,因为对于这个小程序来说,肯定是写程序所花的时间远大于程序运行所话的时间。因此我追求的是如何能快速的写完这个程序,而不是如何让这个程序跑的更快。下面是代码:
static bool isSeperated(string coins)
int first = 0, last = coins.size() - 1;
while(coins[first] == ' ') {first ++;} //找到这些硬币的开始位置
while(coins[last] == ' ') {last --;} //找到这些硬币的结束位置
if(coins[first] == coins[last] )// 头尾的两个硬币相同,肯定没有排列好
int i = first + 1, j = last - 1;
while(coins[i] == coins[first] || coins[i] == ' '){i ++;} //找到第一个与头硬币不同的硬币
while(coins[j] == coins[last] || coins[j] == ' '){j --;}
//找到最后一个与尾硬币不同的硬币
if( i != j + 1)
// 到这里说明已经排列好了
}Solve 函数负责解算,算法很简单,简单的说就是穷举法,把可能的移动方法都试一下,必然就能得到正确的步骤了。唯一需要说明的是对于这个问题,可以移动的步数是无穷的。所以要限定搜索深度,也就是要限定最多移动多少步,这样穷举才能有个尽头。按层数(步数)搜索自然是递归算法写起来最方便。下面是代码:
bool solve(string coins, int depth)
string coins2 =
int first = 0;
int last = coins.size() - 1;
while(coins[first] == ' ') {first ++;}
while(coins[last] == ' ') {last --;}
for( int i = 2 * i & 2 * (last - 1); i++ )
if( move(coins, i) )
{// 表明可以这样移动
depth --; // 记录移动了几步
if( isSeperated(coins) )
// 完成了,输出结果
cout && coins &&
else if( depth != 0 && solve(coins, depth) )// 在当前移动的基础上继续移动
cout && coins &&
// 到这里说明当前的移动是不对的
coins = coins2;
// 试探下一种移动
// 到这里说明所有的移动方式都试过了,全都不行
}最后是主程序,就几行,不用多解释:
int main()
string coins("
if(solve(coins, 5))
cout && coins &&
程序输出的结果如下:
需要说明的是,因为是递归,所以输出的结果要从下往上看。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!大航海时代4拿硬币(金币)游戏必胜方法
大航海时代4中,费南德取硬币小游戏的输赢,有硬币数量和先后手决定。金币数量除以4,余数为1,先手取硬币的输,余数不为1,则先取硬币的胜.
&大航海时代4加强版中,旧主角要招收费南德,要和他玩拿金币的小游戏,并且战胜他,费南德才会加入。至于新主角(蒂雅、伍丁、佐伯),则是。
拿硬币游戏规则
一次可以拿1到3枚硬币,拿最后一枚硬币的人输。
拿硬币游戏输赢的规律
拿硬币游戏的输赢,由硬币的数量和先后手决定。在双方都掌握诀窍的情况下,
桌面上金币数量除以4,余数为1,则先手的输。
桌面上金币数量除以4,余数不为1,则先手的赢。
由于在大航海4中,每次游戏的硬币数量,和先后手都是随机的。所以,要赢游戏,需要一点运气。
怎么赢得取硬币游戏?
无论先手后手,当你第一次取硬币的时候,数一数桌面上的硬币,假设硬币数为A。
(A-1)/4&
余数为几就取几个,如果余数为0,则必败。
接下来,费南德取X个,你就取4-x个硬币即可。
大航海时代4拿硬币游戏
第一次取,此时,桌面上有15枚金币。(15-1)/4,余数为2。那么就拿两枚硬币。接下来
费南德拿1枚硬币,你就拿3枚硬币;
费南德拿2枚硬币,你就拿2枚硬币;
费南得拿3枚硬币,你就拿1枚硬币。
直至最后取胜。
(责任编辑:peter)
------分隔线----------------------------
------分隔线----------------------------
上一篇:没有了
------分隔线----------------------------
赞助商链接后使用我的收藏没有帐号?
所属分类: &
查看: 13|回复: 0
发财法老游戏里面都有哪些特殊的转轴图案?
发表于 6&天前
发财法老游戏里面都有哪些特殊的转轴图案?
《魔界战记disgaea5》正在超凶联动!
参与联动副本挑战 即可获得超凶福利!一个兴趣使然的up!投稿:15粉丝:1177分享--dynmicweibozoneqqbaidu将视频贴到博客或论坛视频地址复制嵌入代码复制微信扫一扫分享收藏0硬币--稍后看马克一下~用手机看转移阵地~用或其他应用扫描二维码手机下视频请使用扫码若未安装客户端,可直接扫此码下载应用看过该视频的还喜欢正在加载...miniOFF}

我要回帖

更多关于 设置法老王的游戏速度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信