翻硬币问题

本文深入探讨了翻硬币问题,涉及数学与编程的结合,通过C语言实现算法,讲解如何解决这一经典问题,同时结合百度搜索到的相关资源进行讨论。
摘要由CSDN通过智能技术生成

翻硬币问题


翻硬币问题有好几种。
其中的一种是这样的:
桌子上有q = m + n枚硬币,m正面朝上,n枚反面朝上,每一轮翻p枚,在每一轮翻币的时候,被翻的同一枚硬币只能翻一次。问最少多少次能把所有的硬币翻成全部正面或者反面朝上?根据问题的描述,问题实际上隐含:m 、n、 p > 0,m + n > p。
这个问题往往是计算机编程的问题。涉及广度优先还是深度优先搜索。
我对广度优先还是深度优先搜索了解的甚少。以下是用笨办法求解的。
1)            币面状态数:用 (正面朝上币数, 反面朝上币数 )表示,显然初始状态是( m, n )。
假设第一轮翻币翻反面(或者正面)的硬币数为:i1<=n,则第一轮翻币分别翻正面(或者反面)的硬币数为:p - i1 <m,此时币面状态数为:
( m – ( p - i1 ) + i1, n - i1 + ( p - i1 ) ) = ( m – p + 2 * i1 ,  n + p - 2 * i1)
第二轮翻币翻反面(或者正面)的硬币数为:i2< n + p - 2 * i1,则第二轮翻币分别翻正面(或者反面)的硬币数为:p – i2 < m – p + 2 * i1, 此时币面状态数为:
( m – p + 2 * i1 – ( p – i2 ) + i2,  n + p - 2 * i1 + p - 2 * i2)
= ( m – 2 * p + 2 * ( i1 + i2 ) ,  n + 2 * p - 2 * ( i1 + i2 ) )
第三轮币面状态数:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值