双倍魔术游戏里面的第一和第二硬币穿杯子魔术教学是什么意思?

电路设计、嵌入式编程、算法。。。
一个硬币移动游戏的求解算法
这个游戏我是在光荣出的大航海时代威力加强版一个蛮古老的单机版游戏)上第一次见到的。与其说是个游戏,不如说是个智力题。这个题目是这样的:
有个硬币,三个正面,两个反面,最初是间隔排列的,如图所示。
图 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万程序员共同成长!西西游戏网是玩家首选的mg电子游戏下载网站!
您的位置: &>&&>&
mg游戏规则
MG迷走星球电子游戏怎么玩?迷走星球是一种包含五个转轴、三条支付线(横穿窗口且其中符号必须沿着线路形成一个赢赏组合的那条线路)的三个硬币的老虎机游戏,拥有:243条永久启用的支付线路、乘数符号、大爆炸奖金游戏、散布符号...
MG魅力四射电子游戏怎么玩?魅力四射是一种包含三个转轴、三条支付线(横穿窗口且其中符号必须沿着线路形成一个赢赏组合的那条线路)的三个硬币的老虎机游戏,拥有:财神符号、常规奖金最高为1600个硬币...
MG魅力四射电子游戏怎么玩?魅力四射是一种包含三个转轴、三条支付线(横穿窗口且其中符号必须沿着线路形成一个赢赏组合的那条线路)的三个硬币的老虎机游戏,拥有:财神符号、常规奖金最高为 5 000 个硬币...
MG烈火雄鹰电子游戏怎么玩?烈火雄鹰游戏是一个五轴、二十线的老虎机游戏,拥有:散布符号、乘数符号、免费旋转奖金游戏...
首先来介绍下mg扑克电子游戏是用六张翻盖纸牌组成的网上娱乐红利游戏,游戏的目标是把纸牌翻过来展示获胜的组合,支付取决于获胜组合的形成,下面来看看它的玩法规则吧...
MG丰满歌手电子游戏怎么玩?丰满歌手的是一个五轴、二十五和一百二十五老虎机机游戏,拥有:散布符号、免费旋转奖金游戏...
首先来介绍下mg炫目缤纷电子游戏是一种包含三个转轴、一条支付线和三个硬币的老虎机,拥有常规奖金最高为2500个硬币的网上娱乐红利游戏,如何才能在游戏中稳赢,当然我们还是先来了解一下它的游戏规则...
首先来介绍下mg魔法美人鱼电子游戏是一种包含五个卷轴、二十五支付线的老虎机,由扩大野符号、分散符号组成的免费旋转奖金游戏,如何才能赢得大奖?当然是先要熟悉它的游戏规则的...
MG欧洲轮盘电子游戏怎么玩?欧洲轮盘,是一种类似于竞猜的简单游戏,玩家可以在欧洲转盘上的任何一个数字区域点击确认,然后转动转盘后会停在一个数字上,停下之后,所指的数字就是最后的结果 。下面一起来看看MG欧洲轮盘游戏玩法规则吧。
MG魔法森林游戏怎么玩?最近很多游戏玩家都在说,魔法森林如何才可以玩的好?下面就小编就带来了翅膀游戏玩法规则,希望可以帮助打大家,魔法森林游戏是一款包含五个转轴、一条支付线和一个硬币的老虎机游戏,拥有:、财神符号、散布符号、转轴持有功能...
首先来介绍下mg鹰的翅膀电子游戏是一种包含五个卷轴、二十五条支付线、一百二十五个硬币的老虎机,由野生符号、乘数符号、分散符号组成的幸运鹰奖金游戏,既然是老虎机当然都是有游戏规则的...
MG瓦特博士电子游戏怎么玩?MG瓦特博士是一个五转轴和六百个硬币的老虎机游戏,拥有:243条永久启用的支付线路、财神符号、散布符号、免费旋转红利游戏、实验室 红利游戏....
MG双倍惊喜电子游戏怎么玩?双倍惊喜游戏是三卷轴,一条支付线和三个硬币投币机,包括:常规符号、财神、乘数符号....还不会玩的朋友们现在就跟西西小编一起来看看双倍惊喜游戏玩法规则,教你们轻松玩转双倍惊喜游戏。
MG小丑百搭5pk电子游戏怎么玩?小丑百搭5pk游戏是一个标准54张扑克牌游戏,洗牌在每一场比赛。拥有:遵循视频扑克的标准规则、有野生符号、具有双倍功能、最多支付4个000个硬币。好不会的玩家现在跟小编一起来看看小丑百搭5pk游戏玩法规则吧。
首先来介绍下mg双人红利扑克电子游戏是一个标准的52张扑克牌游戏,洗牌在每一场比赛,这个游戏遵循视频扑克的标准规则,具有双功能,最多支付4个000个硬币,有很高的组合支付,如何才能在游戏中获得大奖,下面就来看看小编为大家准备的游戏规则吧...
MG爱情医生电子游戏怎么玩?爱情医生的爱是五轴和二十线的老虎机游戏,拥有:野生符号、散布符号、免费旋转奖金游戏。、押注的特点。下面跟西西小编一起来看看爱情医生游戏玩法规则吧,希望大家喜欢。
首先来介绍下mg寻访海豚电子游戏是一种包含五个转轴、五十条支付线和二百五十个硬币的老虎机,拥有:常规符号、财神符号、散布符号组成的海豚任务红利游戏,既然是老虎机当然都是有游戏规则的...
双倍魔术游戏是一种包含三个转轴、一条支付线和两个硬币的老虎机游戏,拥有:一个财神、乘数符号、常规奖金最高为 1 600 个硬币。
页次:1/8&每页18&总数143&&&&首页&&上一页&&&&&&&&转到:第 1 页第 2 页第 3 页第 4 页第 5 页第 6 页第 7 页第 8 页
很多的事情都需要我们不断的做好事的好,当我们能够对这些问题有进一步的了解和认识,并且真正的思考到位,这对所有的人来说都非常的重要。在对mg电子游戏规则进行思考的时候,我们需要做好的事情都有哪些?对每个喜欢游戏的人来说都很重要,找到正确的思考方向,我们才能够得到更正确的结论。
各个行业的竞争都非常的激烈,mg电子游戏官网都要不断的做好自我完善,在整个过程中找到适合的角度,我们才能够更好的完成这些工作。
学习东西的时候,我们也需要找到正确的角度,这对每个人来说都很关键。有太多的人在做事情的过程中,他们都没有找到更为正确的方法,所以才导致了一些不利的结果。我们在学习mg电子游戏的时候,到底从哪些角度来做好这些方面的事。
MG迪诺魔法门电子游戏怎么玩?迪诺魔法门是一个五轴、二十五和二百五十老虎机游戏,拥有:野生,乘数symbolclosed、分散符号、一个卷轴奖金游戏、一场比赛奖金游戏,下面跟西西小编一起来看看迪诺魔法门游戏玩法规则吧。
首先来介绍下mg百搭二王电子游戏是电动扑克游戏当中的一种,玩法类似梭哈,一副牌4种花色,共计52张,其中2为王牌,想要在游戏里赢得大奖肯定是要先来熟悉下它的游戏规则的...
双倍魔术游戏是一种包含三个转轴、一条支付线和两个硬币的老虎机游戏,拥有:一个财神、乘数符号、常规奖金最高为 1 600 个硬币。
MG爱情医生电子游戏怎么玩?爱情医生的爱是五轴和二十线的老虎机游戏,拥有:野生符号、散布符号、免费旋转奖金游戏。、押注的特点。下面跟西西小编一起来看看爱情医生游戏玩法规则吧,希望大家喜欢。
首先来介绍下mg寻访海豚电子游戏是一种包含五个转轴、五十条支付线和二百五十个硬币的老虎机,拥有:常规符号、财神符号、散布符号组成的海豚任务红利游戏,既然是老虎机当然都是有游戏规则的...
MG小丑百搭5pk电子游戏怎么玩?小丑百搭5pk游戏是一个标准54张扑克牌游戏,洗牌在每一场比赛。拥有:遵循视频扑克的标准规则、有野生符号、具有双倍功能、最多支付4个000个硬币。好不会的玩家现在跟小编一起来看看小丑百搭5pk游戏玩法规则吧。
首先来介绍下mg双人红利扑克电子游戏是一个标准的52张扑克牌游戏,洗牌在每一场比赛,这个游戏遵循视频扑克的标准规则,具有双功能,最多支付4个000个硬币,有很高的组合支付,如何才能在游戏中获得大奖,下面就来看看小编为大家准备的游戏规则吧...如何在取硬币游戏中必胜_百度知道
如何在取硬币游戏中必胜
我有更好的答案
这个只要仔细思考就会发现其中的奥秘。当第一个拿时:首先得用大脑把15个硬币分成4段,(即第一段为3个,第二段为4个,第三段为4个,第四段为4个)自己第一次取3个,等对方取了后,就用4去减对方取的数,再取这个数(即第二次或以后几次都取这一段的最后几个)当第二个拿时就得小心了,如果对方没在第一次拿3个,也同样分成上述的4段,第一段就取最后几个,跟上述也完全一样。若对方第一个就抽3个,那只有随机应变,听天由命了!
采纳率:85%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。一个看守两个囚徒64个硬币的问题? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。35被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答2413 条评论分享收藏感谢收起52 条评论分享收藏感谢收起写回答}

我要回帖

更多关于 一学就会的小魔术硬币 的文章

更多推荐

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

点击添加站长微信