翻硬币问题——数学建模
翻硬币问题诀窍翻硬币问题诀窍复习课程
作者: 杨金珏翻硬币问题诀窍翻硬币问题诀窍硬币问题是公务员考试出现的数学运算题型,属于逻辑类考题,这类问题变化复杂,对考生的推理能力要求高。
博大弘仕杨金珏老师将在这里介绍翻硬币问题的快速解题技巧。
首先要明白什么是“翻硬币问题”,通常题面形式是这样的:M个硬币全部正面朝上,现在要求每次必须同时翻转其中的N个硬币,至少翻转多少次才能使全部硬币反面朝上?那么可能出现四种情况:硬币总数(M)每次翻硬币数量(N)奇奇奇偶偶奇偶偶上面四种情况中,只有当硬币总数是奇数个并且每次翻偶数个硬币时,不能完成要求,其他三种都可以完成翻转。
为什么不能完成这种情况呢?根据奇偶的基本性质可以推导出来,每个硬币必须翻转奇数次才能实现反面朝上,现在总数是奇数,那么所有硬币翻转总数就是奇数个奇数,其结果必定是个奇数。
但是每次翻转偶数个硬币,那么硬币被翻动的总数为偶数乘以翻动次数,结果必定是偶数。
所以这种情况下是不可能完成任务的。
翻硬币问题形式多样,这里总结出了一个基本的解题步骤。
第一步:判断总个数是否与每次翻的个数呈倍数关系。
如果是倍数关系,翻动次数=M÷N第二步:如果没有倍数关系,考虑硬币总数的奇偶情况。
当总数为偶数(1)每次翻的个数是总数减一【例1】现有6个一元面值硬币正面朝上放在桌子上,你可以每次翻转5个硬币(必须要翻转5个),问你最少要经过几次翻转可以使这6个硬币全部反面朝上?A.5次B.6次C.7次D.8次【解析】本题属于归纳推理问题。
一个硬币要翻面,需要翻奇数次,一共有6个硬币,每一次翻转5个,那么必须翻转偶数次才能保证每一枚硬币翻转奇数次,故排除A、C。
因为每次翻五个,则有一个没被改变,或者说每次是在原来的基础上变一个,一共有6个硬币,每次变一个,那么需要6次才能全部变完。
具体过程如下:故需要6次,故正确答案为B。
这类问题的解答公式为:翻动次数=M翻动方法:只要按照第一次第一个不翻,第二次第二个不翻,按照此方法进行操作就可以成功。
硬币翻转之比基尼
于硬币翻转问题——作者:⊿风之〆恶魔(逆流)整理:比基尼哥哥首先,我们要知道翻硬币的四种情况:一、奇数个硬币,每次翻奇数次二、奇数个硬币,每次翻偶数次三、偶数个硬币,每次翻奇数次四、偶数个硬币,每次翻偶数次(注:只有奇数个硬币翻偶数次不能完成翻转,其他三种都可以完成翻转。
)其次,我们要先理解硬币翻转是怎么回事,这类考题都是有以下特点的:1、M个硬币同处于某一面比如说是正面朝上,然后我们设定一次必须同时翻转N个硬币这样一个条件,那我们到底要至少翻转多少次才能达到这个目的呢?2、我们知N一般都是设定是奇数的,M是偶数的,为什么?当然这并不是说N不能是偶数,因为如果N:M=A:B能够转化的话,使达到A,B都是整数的同时,B也是奇数的话也是可以的。
我们为什么要强调N是奇数类型,或者M:N可以化简到奇数的形式呢?因为M肯定是大于N的吧,M-N可以为奇数也可以为偶数。
如果是偶数的话,那好可以分解成1,1的形式(2,2等)也是可以的。
然后我们借助前面全部翻转的N个硬币其中的N-1个,就能让他们同时和1,1这两个硬币一起翻转,最终就能达到全部翻转成功的目的;如果是奇数的话,那我们可以不用减,直接把M分解出来。
至少可以分解成1,1,1,……,1一共是M个1的形式,然后同样的利用借助共同的硬币一起翻转的目的。
因为一个硬币被利用翻转两次的话就回到原来的状态。
这也是M-N正好等于1的类型,为什么是翻转M次的解释。
当然还有种特殊的,比如说86,每次翻转4个,要经过多少次才能达到目的?80/4=20还有6=3+3正好利用好,所以是22次。
也就是说偶数对偶数其实也是可以翻的。
为什么这么说呢?因为偶数可以转化成M个1,而且M是偶数,所以他们利用起来的其它数字能正好对称满足。
综上我们知道只有一种情况,那就是N是奇数,M是偶数的话翻不了,其它情况都可以。
当然方法在我们研究的过程中也已经分析解释清楚了。
M-N=1的话那就是M次其它的基本就是M/N的整数商+1或者+2或者+3的情况。
翻硬币问题
翻硬币问题翻硬币问题有好几种。
其中的一种是这样的:桌子上有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 ) )第三轮币面状态数:( m – 3 * p + 2 * ( i1 + i2 + i3), n + 3 * p - 2 * ( i1 + i2 + i3)) ……………………………………………………第k轮币面状态数:( m – k * p + 2 * ( i1 + i2 + … + i k), n + k * p - 2 * ( i1 + i2 + … + i k))简记:t = i1 + i2 + … + i k,则第k轮币面状态数可以标示为:( m – k * p + 2 * t, n + k * p - 2 * t)2)完成翻币条件如果在某一轮翻币后,正面币数或者反面币数能被p整除(其中之一等于零也被包含),则以后的每一轮全翻那个币面数能被p整除的那一部分就可以完成翻币,这一段话的意思就是:m – k * p + 2 * t = s * p或:n + k * p - 2 * t = s * p稍微变换一下:m – k * p + 2 * t = s * p —> ( s + k ) * p – 2 * t = m或:n + k * p - 2 * t = s * p —> ( s – k ) * p + 2 * t = n因此问题转换为求解不定方程:( s + k ) * p – 2 * t = m或者( s – k ) * p + 2 * t = n隐含条件:t >= 0, k >= 0, s >= 0, 如果t > 0, k > 0, s >= 0m – k * p + 2 * t >= 0, n + k * p – 2 * t <= m + n Æ k * p – 2 *t <= m同时还必须:m – k * p + 2 * t <= m + n Æ 2 * t – k * p <= n, n + k * p – 2 * t >= 0 3)二元一次不定方程的整数解这个问题网上有多个介绍,可以谷歌或者百度一下,答案一大堆。
翻硬币问题——数学建模
次 数 硬币 ① ② ③ ④ 0 1 1 1 1 1 0 1 1 1
翻面次数
2 0 1 1 1
3 0 0 1 1
4 0 0 1 1
顺 序 ④ ② ① ③
5 1 0 1 1
6 1 0 1 1
7 0 1 0 1
8 0 1 0 1
顺 序 ③ ② ④ ①
9 1 1 0 1
10 0 0 0 1
后的状态。那么简单推理可知 w(m, 2 f (m)) {x1, x2 ,……, xm}, 其中xi 1 ,也 就是说翻面 2 f (m) 次后必然全部正面朝上。 但是,对多个 m 考察后发现, 在f (m)-1或者f (m) 次时一般已经成立,这 取决于具体的映射关系。 本文针对此映射关系即 f (m) 的具体表达式只做简单探讨。 (1) 尝试探求 f (m) 的表达式:
11 1 1 1 1
12 0 0 0 0
顺 序 ① ② ③ ④
10
4 3 2
41
4 3 2
33
4 3 2
17
41
4 1
20 30 40
23 14
映射关系
26 45 16
29 37 47
1
32
1
1
表 示 翻 面 次 数 ;
图 1 四枚硬币的状态循环
表 示 第 四 枚 硬 币 ;
观察发现,在经历三轮循环(4 次+4 次+4 次)翻面后,所有硬币重新 回到初始状态的位置,并且翻面次数的奇偶性一致,在 m=4 时,三轮循环 后全部反面朝上, 那么在之前的一次翻面时, 必为全部正面朝上, 也就是说,
输入 m,p=1,v=2m,i=0
m为偶数? N Y
对教材“翻硬币的游戏问题”的深入探究
对教材“翻硬币的游戏问题”的深入探究摘要:“翻硬币的游戏”问题,解决这个问题首先要确定能否进行翻转,二是如何确定翻转的最少次数。
为了使动手操作时更为直观和方便,把课本中的“翻硬币”改为翻纸杯。
关键词:数学原理,翻转次数的最大值,数字化的赋值,广泛应用;青岛版七年级上学期数学教科书第63页“知趣园”中,有一个“翻硬币的游戏”问题。
教学中发现有的学生对课本的解释不太明白,也有的学生明白了5枚硬币,各枚的正面都朝上,每次翻动其中的4枚,不论翻动多少次,都不能使硬币的正面都朝下;但对“翻动其中的3枚,经过若干次后,使5枚硬币的正面都朝下不理解;还有的学生对“经过若干次后”这个若干次的最小次数是多少产生了兴趣,但一直找不到正确的方法解决这一问题。
笔者对这个游戏进行了深入细致的研究,从而发现解决问题的方法,提供给大家参考。
解决这个问题首先要确定能否进行翻转,二是如何确定翻转的最少次数。
为了使动手操作时更为直观和方便,把课本中的“翻硬币”改为翻纸杯。
以下笔者就这一翻转纸杯游戏进行探究。
问题1:现有4个完全相同的纸杯,杯口全部向上,每次翻转其中3个,经过几次翻转,可使杯口全部向下?由于纸杯是完全相同的,仅仅是杯口向上或杯口向下的区别,可以给每个纸杯赋以数值。
每个杯口向上的纸杯记为“+1”,每个杯口向下的纸杯记为“-1”。
这样可把翻转纸杯看成一种“运算”:每次翻转1个纸杯,使杯口由向上变为向下,或使杯口由向下变为向上,相当于把原来的结果乘以“-1”。
4个杯口全部向上的纸杯是4个“+1”,4个杯口全部向下的纸杯是4个“-1”。
我们由建立一种“运算”,使开始时4个“+1”化为结束时的4个“-1”成立,则翻转成功。
由于纸杯在翻转前后的数量是完全相同的,不妨取它们的“积”作为这种运算的始末,4个“+1”的积是“+1”,4个“-1”的积是“+1”。
由这样建立的一种“运算”,使积“+1”化为积“+1”成立。
翻转纸杯的过程,用图演示如下:初始状态:+ + + +第一次:- - - +第二次:- + + -第四次:- - - -每次翻转其中3个纸杯,相当于把原来的结果乘以3个“-1”。
列出所有等可能的结果[下学期]
如果抛三枚普通硬币,又有几个 等可能的结果呢?
比较“2枚”与“3枚”的树图有什么异同点吗? 请利用树状图找出答案,并加以分析
口袋中装有1个红球和2个白球 搅匀后从中摸出一个球,会出 现哪些可能的结果?机会均等 吗?画出树状图。
口袋中装有1个红球和2个白球 如果摸完第一个球后接着摸第 二个球,两次摸球会出现哪些可 能的结果?画出该事件的树状图。
1+4=5 2+4=6 3+4=7
4
4+1=5
4+2=6
4+3=7
4+4=8
从表中可知: 7 5 所得点数之和有____种可能,点数之和为____时机会最大.
解法二 画树状图
依次取点数之和分别是: 2,3,4,5;3,4,5,6;4,5,6,7;5,6,7,8.
7 5 所得点数之和有____种可能,点数之和为____时机会最大
四
1.今天你学到了什么?
2.你能用你自己的话来说一 说吗?
请多提宝贵意见!
从练习1的两种解法中 我们可以发现不管是用列表 法还是用画树状图法,都可 以帮助我们直观形象地分析 问题、解决问题.
2、据报道,陕西某家商场设置了转盘摇 奖式有奖销售。然而该商家在转盘里放置 了磁铁,摇奖者是没有机会中大奖的。
(1)为什么这个
转盘永远也不会 中大奖号码呢?
(2)请大家谈谈自
己的看法。
机会大小的比较
——列举所有等可能的结果
抛一枚普通硬币,硬币落地后, 会出现哪些可能的结果?
正面朝上或反面朝上
两个事件发生的机会相等 等中的所有等可能的结果,从而分析一 些简单事件发生的机会。
抛两枚普通硬币,有几个等可能 的结果呢?
抛硬币概率模型的妙用
1
的 概 率 变为 , 求 与y 的值 .
4
主 1 3 5 ’ 一 【 v = 1 .
3 3
【 分析 】 问题 ( 1 ) 中的 概 率 明 确 了 , 但球
的个数不确定 . 当概率一定 时 , 白球 的数 量 将 随 着 黑 球 数 量 的变 化 而 变 化 , 利 用 概 率 的 计 算 公 式P( 白球 ) =白球 数 量 ÷ 球 的 总数 量 便 可 建 立 函数 关 系 . 问题 ( 2 ) 中 再 次 利 用 概 率 的计 算 公 式 建 立 一 个 y 与 的 函数 关 系
【 点评 】 利 用 概 率 计 算 的 公 式 构 造 函数 建 立 等量 关 系 , 列 出方 程 或 方 程 组 , 再通过
例2 ( 2 0 1 4 ・ 黑龙 江 哈 尔滨 ) 在 一 个 不
透 明 的 口袋 中 , 有 四 个 完 全 相 同的 小球 , 把
它们分别标号 为1 … 2 3 4 , 随机 地 摸 取 一 个
小球记 下标 号后放 回 , 再 随机 地 摸 取 一 个
小球记 下标 号 , 则 两 次摸 取 的 小球 标 号 都 是1 的概 率 为— — .
一
解: ( 1 )由题 意 得 : P ( 白球 ) = 3 + y = 了 1
,
、
函数与方程思想
3+%+v
3
例1 已知 一 个 不 透 明 的 口袋 中装 有 7 个只有颜 色不 同的球 , 其 中3 个 白球 , 个黑球 . ( 1 )若 向 袋 中再 放 . T r y 个 白球 后 , 从 中
一
用树 状 图可 以验 证 .
翻硬币问题(精)
翻硬币问题桌面上有n枚硬币, 初态是全部正面向上,现让你每轮把其中的m (2m≤n)枚翻转,希望最终全部反面向上. 请建立数学模型研究n, m 在什么条件下此问题有解或无解.解答:1.概念与性质定义:纯翻转-------m个都是正面的一轮翻转;(混合)翻转------取a (>0)个正面,m-a个反面的一轮翻转.显然,纯翻转是混合翻转的特例(a=m).设=+,(1)n sm t≤<, s为正整数.其中,t为n除以m的余数,0t m记变量k表示当前的正面数.显然,从开始,经过s轮纯翻转后k=t; 当k=0时,就成功了.性质1. 选a个正面和m-a个反面的一轮翻转后,正面数的变化量为.k m a∆=-,(2)2∆=-.特别是,做纯翻转时,k m性质2. 当k(<2m)为偶数时,只需再翻两轮必会成功.证明:若k=m , 则做一轮纯翻转必成功.≠,则先选k/2个正面和m-k/2个反面做一轮翻转,若k m1(注:因2m<n<2n-k, 故2m<2n-k, 2m-k<2n-2k, m-k/2<n-k, n-k是反面数,即这样选取是可行的. )则翻转后的正面数k k k k m k m=+∆=+-='()k=,就成功了.再做一轮纯翻转,"0≠时,只翻一轮必定未能成功,故翻两轮必是最佳方法因为k m(轮数最少)2.情形一,m是奇数(不论n是奇数还是偶数).先做s-1轮纯翻转,得k=m+t. 只有如下3种可能:(ⅰ)t=0. k=m, 再做一轮纯翻转就成功.(ⅱ)t (<m)是奇数. k已是偶数,且m<k<2m.由性质2,只需再翻两轮必会成功.(ⅲ)t (<m)是偶数. 再做一轮纯翻转后化为k=t. 由性质2,只需再翻两轮必会成功.3.情形二,n,m都是偶数. 由(1)式知t是偶数或0, 经s轮纯翻转后,k=t,由性质2,至多再翻两轮就会成功.4.情形三,n是奇数,m是偶数. 由(1)式知t是奇数, 由(2)式知, k∆是偶数或0,故无论翻转多少轮,k始终是奇数, 不会出现k=0, 即不会成功.25.综合6. 例子例1.n=8,m=3, s=2, t=2. 翻4轮必成功0------正面,1------反面例2 . n=7,m=3, s=2, t=1. 翻3轮必成功34推广把以上的条件2m ≤n , 改为 m ≤n 。
蓝桥杯历届试题翻硬币(贪心)
蓝桥杯历届试题翻硬币(贪⼼)历届试题翻硬币时间限制:1.0s 内存限制:256.0MB问题描述⼩明正在玩⼀个“翻硬币”的游戏。
桌上放着排成⼀排的若⼲硬币。
我们⽤ * 表⽰正⾯,⽤ o 表⽰反⾯(是⼩写字母,不是零)。
⽐如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在⼩明的问题是:如果已知了初始状态和要达到的⽬标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局⾯,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做⼀步操作,那么要求:输⼊格式两⾏等长的字符串,分别表⽰初始状态和要达到的⽬标状态。
每⾏的长度<1000输出格式⼀个整数,表⽰最⼩操作步数。
样例输⼊1**********o****o****样例输出15样例输⼊2*o**o***o****o***o**o***样例输出21 贪⼼题。
我的思路是先对两个字符串进⾏⽐较,⽤数组记录下⽐较的结果,0表⽰字符相同,1表⽰字符不同。
⽤题⽬给的例⼦⽰范: ********** o****o**** ⽐较结果为: 1000010000 翻动次数就是两个1之间的下标之差。
当然也有些复杂的情况,若⽐较结果为: 101101100101 你是直接翻动中间的两个“11”处的硬币再解决其它硬币呢(因为翻动相邻的两个硬币只算⼀次操作),还是按上⾯的规则依次计算呢? 这道题“贪⼼”之处就在这⾥,事实上从左到右依次按上⾯蓝字的规则累加计数,就可求得最优结果。
代码如下:1 #include <iostream>2using namespace std;3int main()4 {5char s1[1000];6char s2[1000];7int cr[1000]; //记录两个字符串的⽐较结果。
0为相同,1为不同。
8while(cin>>s1){9 cin>>s2;10int l;11for(l=0;s1[l]!='\0';l++); //计算长度12for(int i=0;i<l;i++){ //⽐较两个字符串,并记录结果13if(s1[i]==s2[i])14 cr[i]=0;15else16 cr[i]=1;17 }18int f=-1; //记录标记位19int _count=0;20for(int i=0;i<l;i++){21if(cr[i]==1){ //检测到⼀个 122if(f==-1){ //如果前⾯没有记录的1的下标,记录当前1的下标23 f=i;24 }25else{ //如果前⾯有⼀个1了26 _count+=i-f;27 f=-1;28 }29 }30 }31 cout<<_count<<endl;32 }33return0;34 }Freecode :。
数学建模-用数学方法翻模拟硬币(1)
用数学方法模拟翻硬币问题背景:一摞硬币共m枚,每枚硬币均正面朝上,取最上面的1枚,将它翻面后放回原处,然后取最上面的2枚硬币,将它们一起翻面后再放回原处。
再取3枚,4枚,…,直至整摞硬币都按上述方法处理过。
接下来再从这摞硬币最上面的1枚开始,重复刚才的做法。
这样一直做下去,直至这摞硬币中的每一个又都是正面朝上为止。
问这种情形是否一定出现?如果出现,则一共需做多少次翻面?问题分析:很明显,当完成这样的一组翻面后,只须每枚硬币的累计翻面次数为偶数,就可以使这一摞硬币中每一枚都是正面朝上。
每当完成这样一组翻面时,翻面之前硬币的顺序被打乱,如果从一开始就将硬币从上至下依次标号为1,2,3,…,m,对硬币顺序的调整和一组翻面完成后对应标号硬币的翻面次数进行跟踪,那么就可以实现判断何时能出现这摞硬币中的每一个又都是正面朝上。
问题简化和假设:首先对这摞硬币从上至下依次标号为1,2,3,…,m,就构成一个行向量a=[1,2,3,…,m],题中翻面所引起的硬币顺序的调整可以简化为对这个列向量右乘一系列m阶初等矩阵(这里用到的初等矩阵均为交换m阶单位阵的某两行得到的),例如:当m=5时:取1枚硬币翻面,顺序未变化;取2枚硬币翻面,标号1和标号2的硬币顺序交换,则:对向量a右乘E12;取3枚硬币翻面,标号1和标号3的硬币顺序交换,则:继续右乘E13;取4枚硬币翻面,标号1和标号2的硬币顺序交换,则:继续右乘E14,E23;取5枚硬币翻面,标号1和标号2的硬币顺序交换,则:继续右乘E15,E24;故,最终得到的硬币顺序对应的行向量为:a*E12*E13*E14*E23*E15*E24建立模型:当对一摞m个硬币进行一组翻面操作后,可以用归纳法得到:从上至下,第i个硬币的翻面次数为m+1-i;例如:第1个硬币共翻面m次;第2个硬币翻面m-1次;第m个硬币翻面1次;换言之,在一组翻面中,翻面次数只与硬币的位置有关,那么就可以通过次数统计向量行向量sum与标号向量a做相同的变换,即右乘一系列初等矩阵,来实现向量sum和a的分量的一一对应,即标号为a(i)的硬币的累计翻面次数为:sum(i)=sum(i)+(m+1-i)硬币顺序的变换就用右乘一系列初等矩阵的方法,在编写计算机程序时通过循环和限定条件来实现。
归纳算法(翻硬币问题)
(1)实验设计的数据结构
(1)数组
int s[1000];;
(2)层次图
/***************翻硬币过程1(偶数)******************/
int Upturn_process1 (int coins_Number)
{
int i, j;
for(i = 0; i < coins_Number; i++)
福建工程学院计算机与信息科学系
实验报告
2010–2011学年第一学期 任课老师:
实验题目
归纳算法设计技术的应用
实验时间
实验开始日期:2010/11/26
报告提交日期:2010/11/26
实验目的、要求
一、实验题目
1、有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)
{
printf("Step %d:\n",i+1);
2、有N个硬币(N为奇数)正面朝上排成一排,每次将N-2个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数输出(用*表示正面,O表示反面)
二、实验要求
1.该实验的课内学时是4个课时。Fra bibliotek加强要求:
1)将1、2 题集成为一个程序,根据用户输入判断奇数还是偶数,执行相应的过程。
翻硬币问题
翻硬币问题个硬币和前面已经翻成反面的1个硬币。
XXXXXO XXOO最后把剩下的两个正面硬币和刚才翻成正面的那个硬币一起翻过来。
XXXXXX XXXX只要余数是偶数,都可以采用这样的方法翻转。
再回过头来看下最初计算式子,10÷3=3……1,我们改写余数为10÷3=2……4,商减少了1,余数变成了1+3=4,余数加除数。
根据奇偶基本性质,这里变化的余数一定是个偶数,因为被除数是偶数,被除数=除数×商+1,要使余数为1,除数和商必定也是奇数。
所以变化后的余数等于1+除数,结果必定为偶数。
偶数就需要2步完成翻转,总体上在原来商的基础上只增加了1,所以余数b=1时,翻动次数=a+1。
②b=偶数,翻动次数=a+2【例3】共有92个杯口朝上的杯子,每次翻动11个杯子,使其杯口朝下,总共翻动几次才能让所有杯子反面朝下?A.9次B.10次C.11次D.12次【解析】利用公式:M÷N=92÷11=8……4。
余数b=偶数,翻动次数=8+2=10。
翻动方法和上一道例题相同,将最后剩下的4个杯子分成两组,先翻其中的2个和前面已经翻过的2个,然后刚好剩下4个杯口朝上的杯子。
总共需要10次。
翻动方法如图所示:(第8次) XXX …… XXX XXX XXX OOOO(第9次) XXX …… OOO OOO OOO XXOO(第10次)XXX …… XXX XXX XXX XXXX③b=奇数,翻动次数=a+3【例4】有18个房间开着灯,如果每次同时拨动5个房间的开关,经过几次拨动,灯全部关上?A.3次B.4次C.6次D.几次也不能【解析】利用公式:M÷N=18÷5=3……3。
余数b=奇数,翻动b为奇数,则需a+3。
蓝桥杯历年试题矩阵翻硬币
蓝桥杯历年试题矩阵翻硬币问题描述 ⼩明先把硬币摆成了⼀个 n ⾏ m 列的矩阵。
随后,⼩明对每⼀个硬币分别进⾏⼀次 Q 操作。
对第x⾏第y列的硬币进⾏ Q 操作的定义:将所有第 i*x ⾏,第 j*y 列的硬币进⾏翻转。
其中i和j为任意使操作可⾏的正整数,⾏号和列号都是从1开始。
当⼩明对所有硬币都进⾏了⼀次 Q 操作后,他发现了⼀个奇迹——所有硬币均为正⾯朝上。
⼩明想知道最开始有多少枚硬币是反⾯朝上的。
于是,他向他的好朋友⼩M寻求帮助。
聪明的⼩M告诉⼩明,只需要对所有硬币再进⾏⼀次Q操作,即可恢复到最开始的状态。
然⽽⼩明很懒,不愿意照做。
于是⼩明希望你给出他更好的⽅法。
帮他计算出答案。
输⼊格式 输⼊数据包含⼀⾏,两个正整数 n m,含义见题⽬描述。
输出格式 输出⼀个正整数,表⽰最开始有多少枚硬币是反⾯朝上的。
样例输⼊2 3样例输出1数据规模和约定 对于10%的数据,n、m <= 10^3; 对于20%的数据,n、m <= 10^7; 对于40%的数据,n、m <= 10^15; 对于10%的数据,n、m <= 10^1000(10的1000次⽅)。
思路:杭电以前做过⼀道⼀维的题⽬(灯泡的开闭,具体题⽬名记不到了),先看⼀维。
因为和顺序⽆关,我们从⼩到达进⾏,对于第x个棋⼦它的最终状态取决与1-x约数个数的奇偶,⽽只有平⽅数的约数个数是奇数,所以转变成求1-n中平⽅数个数,如果有k个平⽅数,最⼤的平⽅数为k^2,k^2<=n,所以k为sqrt(n)取整。
拓展到⼆维原理是⼀样的,只不过需要同时满⾜x,y均为平⽅数,那么这样的数的个数即为(1-n的平⽅数个数)*(1-m的平⽅数个数)。
观察⼀下题⽬的数据范围,上⾼精度,扔模板。
#include <iostream>#include <cstdio>#include <string>#include <cmath>#define LL long long intusing namespace std;struct numlist{static const int L=1100;int a[L];int len;void ini(string s)//字符串输⼊{fill(a,a+L,0);for(int i=s.length()-1;i>=0;i--)a[s.length()-i-1]=s[i]-'0';len=s.length();}void ini(long long int num)//数字输⼊{fill(a,a+L,0);len=0;if(num==0) len++;while(num){a[len++]=num%10;num/=10;}}void updateBit()//更新位数,约定0的位数是0{len=0;for(int i=0; i<L; i++){if(a[i]!=0)len=i+1;if(a[i]>=10){int temp=a[i]/10;a[i]%=10;a[i+1]+=temp;}if(a[i]<0){int temp=-(a[i]%10!=0)+a[i]/10;a[i]%=10;if(a[i]<0) a[i]+=10;a[i+1]+=temp;}}}void print()//测试输出{for(int i=len-1;i>=0;i--)cout<<a[i];cout<<endl;/*for(int i=len-1;i>=0;i--)printf("%d",a[i]);printf("\n");*/}};numlist Add(numlist a,int num){int p=0;while(num){a.a[p++]+=num%10;num/=10;}a.updateBit();return a;}numlist Add(numlist a,numlist b,int f){int mx=a.len;if(b.len>mx) mx=b.len;for(int i=0;i<mx;i++)a.a[i]+=b.a[i]*f;a.updateBit();return a;}int fix=0;numlist Bmut(numlist a,numlist b){numlist c;c.ini(0);for(int i=0; i<a.len; i++)for(int j=0; j<b.len; j++)c.a[i+j]+=a.a[i]*b.a[j];c.updateBit();return c;}int BitCmp(numlist a,numlist b)//1:a>b,-1:a<b,0:a==b {if(a.len!=b.len)return a.len>b.len?1:-1;for(int i=a.len-1;i>=0;i--)if(a.a[i]!=b.a[i])return a.a[i]>b.a[i]?1:-1;return0;}numlist Sqrt(numlist a){numlist rec,num100,high,preBit;num100.ini(100);string ans="";//顺序记录每⼀位int pos=a.len-(!(a.len%2)+1);numlist temp;int initNum=0;for(int i=a.len-1;i>=pos;i--)initNum*=10,initNum+=a.a[i];ans+=sqrt(initNum)+'0';preBit.ini(ans);initNum-=(int)sqrt(initNum)*(int)sqrt(initNum);//cout<<initNum<<endl;temp.ini(initNum);//部分余数pos-=2;for(;pos>=0;pos-=2){ans+='0';for(int i=preBit.len;i>0;i--)preBit.a[i]=preBit.a[i-1];preBit.a[0]=0;preBit.len++;high=preBit;high=Add(high,high,1);temp=Bmut(temp,num100);temp=Add(temp,a.a[pos]+a.a[pos+1]*10); numlist pn,pn1;numlist pnow,ppre;int p=5;do{pn.ini(p),pn1.ini(p-1);pnow=Bmut(Add(high,p),pn);ppre=Bmut(Add(high,p-1),pn1);if(BitCmp(temp,ppre)<0)p--;else if(BitCmp(pnow,temp)<=0)p++;elsebreak;}while(1);p--;preBit.a[0]=p;pn.ini(p);pnow=Bmut(Add(high,p),pn);temp=Add(temp,pnow,-1);ans[ans.length()-1]=p+'0';//cout<<"---"<<endl;}rec.ini(ans);return rec;}int main(){string a,b;while(cin>>a>>b){numlist ax,bx;ax.ini(a);bx.ini(b);Bmut(Sqrt(ax),Sqrt(bx)).print();//Add(temp,-5);}return0;}。
翻硬币问题
翻硬币问题一、问题重述一摞硬币共m枚,每枚硬币均正面朝上。
取最上面的1枚,将它翻面后放回原处,然后取最上面的2枚硬币,将它们一起翻面后再放回原处。
再取3枚、4枚、…,直到整摞硬币都按上面方法处理过。
接下来再从这摞硬币最上面的一枚开始,重复刚才的做法。
这样一直做下去,直到这摞硬币中的每一个都正面朝上为止。
问这种情形是否一定会出现?如果出现,则一共需要做多少次翻面?二、计算机程序的模拟及数据收集由于开始时这摞硬币为有限个且均正面朝上, 因此可以想到, 按照上面的方法将这摞硬币进行翻面只会有两种结果: 一是不会全部正面朝上, 但它有一个循环周期。
二是经过有限次翻面, 可以使每一个硬币又都翻成正面朝上。
对此,我们准备先对这个问题进行计算机程序编写,要求输入硬币数量m,然后输出需要执行的次数(翻硬币次数)。
然后对数量较小的m进行列表,尽可能总结其中的规矩。
程序如下://查找每轮循环后的位置int GetTurnAfterPos(int n, int turn, int m){int TurnNum ;//每轮翻转次数int TurnAfterPos; //每轮循环后的位置TurnNum = turn - n + 1;if(TurnNum % 2 == 0) //为偶数次循环TurnAfterPos = n + TurnNum / 2;else //为奇数次循环TurnAfterPos = (TurnNum + 1) / 2;return TurnAfterPos;}//每一轮翻转之后的位置:int solve(int turn, int * CurrentPos, int m){if(turn == 0)return 0;for(int i = 0; i < turn; i ++){int RetNum = GetTurnAfterPos(i+1, turn, m);CurrentPos[RetNum-1] = CurrentPos[m+i];}for(i = 0; i < m; i ++){CurrentPos[i+m] = CurrentPos[i];}return 0;}int main(){int m = 30;//硬币总数int * CurrentPos = new int[m*2];int n = 0;//翻转次数bool flag = false;do{n++;for(int i = 0; i < m*2; i++)CurrentPos[i] = i % m + 1;int x = n / m;int y = n % m;for(i = 0; i < x; i++)solve(m, CurrentPos, m);solve(y, CurrentPos, m);for(i = 0; i < m; i ++){printf("%d ",CurrentPos[i]);}//solve(5, CurrentPos, m);printf("/n");for(i = 0; i < m; i++){if(CurrentPos[i] != i+1){break;}if(i == m - 1 && n > 1)flag = true;}}while(!flag);if(m % 2 == 0)printf("翻转的总次数是: %d/n", n - 1);elseprintf("翻转的总次数是: %d/n", n);delete []CurrentPos;return 0;}三、问题的分析对上面的数据做简单的运算可以发现,对于特定硬币个数m 的翻面次数,部分可以表示为m 的平方或者m 的平方减一的形式。
硬币翻转问题
硬币翻转问题全面分析(黑体字一定要看)现有6个一元面值硬币正面朝上放在桌子上,你可以每次翻转5个硬币(必须翻转5个),问你最少经过几次翻转可以使这6个硬币全部反面朝上?A.5次B. 6次C.7次D.8次当M为偶数时,N有以下几种情况:(1) N=M-1例如:现有6个一元面值硬币正面朝上的放在桌上,你可以每次翻转5个硬币(必须翻转5个),问你最少经过几次翻转才可以使这6个硬币全部反面朝上?A 5次B 6次C 7次D 8次这种情况是固定的答案就是M次(2)N>M/2 但不满足N=M-1,例如:现有8个一元面值硬币正面朝上的放在桌上,你可以每次翻转5个硬币(必须翻转5个),问你最少经过几次翻转才可以使这8个硬币全部反面朝上?注: 5>8/2, 且5不等于7 满足条件的。
这种情况我总结了一个公式为结果=(M-N)÷2+2,(前面除以2部分要采用四舍五入)解析:(8-5)÷2+2=4次(3)N<M/2我们根据逆向思维原则,可以反过来利用(2)的公式求解,例如:现有8个一元面值硬币正面朝上的放在桌上,你可以每次翻转3个硬币(必须翻转3个),问你最少经过几次翻转才可以使这8个硬币全部反面朝上?3<8/2, 满足条件。
我们注意到:8=3+5,因此每次翻转3个,和每次翻转5个是相同的效果,次数一样。
故而转化为(2)的方式求解。
还是4次。
当M为奇数的时候,N也有如下几种情况:(1)N>M/2例如:现有11个一元面值硬币正面朝上的放在桌上,你可以每次翻转7个硬币(必须翻转7个),问你最少经过几次翻转才可以使这11个硬币全部反面朝上?这种情况的结果固定为3.(2)N<M/2例如:现有11个一元面值硬币正面朝上的放在桌上,你可以每次翻转5个硬币(必须翻转5个),问你最少经过几次翻转才可以使这11个硬币全部反面朝上?我们可以发现 11=5+6,我们先转换1次剩下的6个再每次转换5个,就变成了偶数情况,但是注意,其结果并不是1+6=7,当剩下的结果比翻转次数大1,那么其结果只需再+2即可那么答案就是1+2=3次。
翻硬币问题
例题精讲
例4.有8个杯口全部向上的杯子,每次将其中5个同时翻 转,经过几次翻转,杯口可以全部向下? A.4 B.5 C.6 D. 几次也不能
解析:根据奇偶性可知,需要翻偶数次,排除B、D。代入 排除法:N×P=2×X+M,结合选项将P=4代入,5×4=2×X+8, 解得:X=6,为整数,因此P=4满足题意,答案选A。
注意 :如果求出 P=2 , 经验证翻不出来 。此时需计算出 K 值 ,K=M-N , 公式 转化成 K ·P=2X+M , 接着继续用试代法求 P 的最小值 。 “M 个杯子每次翻 N 个”与“M 个杯子每次翻 M-N 个”是等同的,求最小 翻转次数的结果是一样的。
例题精讲
例1.有9个杯口全部向上的杯子,每次将其中6个同时翻 转,经过几次翻转,杯口可以全部向下? A.3 B.6 C.9 D. 几次也不能
N 为偶数,且
如果能,最少需要几次?
考试常考规律:
1.最简单的情况是,当杯子总数 M 是每次翻动个数 N 的整数倍时,M/N 即为最少的翻动次数。
2.当杯子总数 M 不能被每次翻动个数 N 整除时,N=M-1 时,需翻M次。
如果能,最少需要几次?
其他规律:
根据以下公式求翻杯子的最少次数 :N·P=2X+M, (X ≥0 ),其中 N 为每次翻杯子的个数 ,M 为总杯子 数 ,P是翻杯子的最少次数 ,X表示在翻杯子过程中反复操 作的杯子数 。 求翻杯子的次数P的最小值就可以结合选项进行试 代 ,X出现非负整数值时说明能翻成功。
祝大家工作愉快!
(○表示杯口朝上,●表示杯口朝下) ○○○○○○○○ 第一次:●●●●●●○○ 第二次:●●○○○○●● 第三次:○○●●○○○○ 第四次:●●●●●●●●
翻硬币
那么可能出现四种情况:
硬币总数(M) 每次翻硬币数量(N)
奇 奇
奇 偶
③b=奇数,翻动次数=a+3
【例4】有18个房间开着灯,如果每次同时拨动5个房间的开关,经过几次拨动,灯全部关上?
A.3次 B.4次 C公式:M÷N=18÷5=3……3。余数b=奇数,翻动次数=3+3=6。
翻硬币问题形式多样,这里总结出了一个基本的解题步骤。
第一步:判断总个数是否与每次翻的个数呈倍数关系。如果是倍数关系,翻动次数=M÷N
第二步:如果没有倍数关系,考虑硬币总数的奇偶情况。
当总数为偶数
(1)每次翻的个数是总数减一
【例1】现有6个一元面值硬币正面朝上放在桌子上,你可以每次翻转5个硬币(必须要翻转5个),问你最少要经过几次翻转可以使这6个硬币全部反面朝上?
故需要6次,故正确答案为B。
这类问题的解答公式为:翻动次数=M
翻动方法:只要按照第一次第一个不翻,第二次第二个不翻,按照此方法进行操作就可以成功。
(2)除了上述以外情况,要计算翻动次数,我们采用余数分析法。
首先用总数(M)÷每次翻的个数(N),表达式为:
这个公式在怎么推导出来的呢?
此题计算为10÷3=3……1,余数为1,我们需要改写余数为10÷3=2……4,相当于翻了2次3个硬币,还剩下4个硬币没有翻过来。
OOOOOO OOOO
XXXXXX OOOO
那么我们将这4个硬币分成两组,每组两个。接下来翻其中的2个硬币和前面已经翻成反面的1个硬币。
下面我们总结一下翻硬币问题的解题方法。
再议翻硬币问题(for 右右)
曾经讨论得半生不熟的,后来不小心删除了。
再后来遇见右右同学,勾起了我的兴趣,于是再讨论之!先PS:由于懒得慢慢用数学公式编辑器,所以很多漂亮的下标等在这里会表现得相当丑陋!题目:M个全为正面的硬币,每次翻转其中N个(M>N且M不被N整除);问:至少多少次能翻成全为反面的状态?准备1:第一次翻动后的状态必为:N反,M-N正;最后一次翻动前状态必为:M-N反,N正;故中间翻动的总体“做功”为:增加了2N-M个正面;准备2:不妨设每次翻动的N个硬币中,有a个反面,b个正面;则每次翻动引起的正面个数的总体变化为:a-b个;姑且称a-b为引动量;且:(1)a+b=N;(2)N≥a-b≥-N(前提:有足够多的正面和反面硬币,后自知)(3)N与a-b同奇偶;(4)若有足够多的正面和反面硬币,a-b可以取遍[-N,N]的所有奇数(偶数);开始讨论:一、讨论2N>M>N的情况;(一)M奇N偶易知:每一次的引动量均为偶数,而M为奇数;故:无解;(二)M奇N奇易知:2N-M为奇数。
解方程组:a+b=N;a-b=2N-M得:a=(3N-M)/2<N;b=(M-N)/2<M-N(注意:3N-M和M-N均为偶数,否则不能除以2)故:3次(三)M偶N偶同(二),亦:3次(四)M偶N奇此时注意:3N-M和M-N均为奇数,不能除以2;故不可能3次!或另一思路:每一次引动量均为奇数,M为偶数,故不可能奇数次;考虑:是否可以4次搞定呢?即通过两次引动量的奇数凑成:2N-M这一偶数。
答案:不一定行;理由如前面(2)的前提:不一定有足够多的正面和反面硬币;至于此种状况下具体需要多少次,放在最后再讨论;再PS:当N=M-1时,必须M次,无捷径;因为,每一次没有翻动的那个硬币必须正反交替,否则会导致回到上一步;二、3N>M>2N的情况1、M奇N偶亦:无解;2、M奇N奇易知:2N-M是奇数;且:0>2N-M>-N;由(4)知:3次3、M偶N偶同上:3次4、M偶N奇此时有:2N-M为偶数;且:0>2N-M>-N此种情况表面上看类似于(四),但事实上,此时有足够用的正面和反面硬币提供;令:a1+b1=N;a2+b2=N;则可推知:a1-b1+a2-b2可以取遍[N-M+1,N-1]的所有偶数!(即:第二次和第三次合起来的最大效果可达到只有一枚正面或只有一枚反面)故:4次注意1:-N-(N-M+1)≥1>0;N-1≥2>0.注意2:具体的取值可以根据需要在不定方程中适当配置,此处略掉注意3:此小点的讨论需要用点心才看得懂三、推广:(n+1)N>M>nN,(n≥2)M奇N偶:无解;M奇N奇:若n奇,则需n+2次;若n偶,则需n+1次;M偶N偶:需n+1次;M偶N奇:若n奇,则需n+1次;若n偶,则需n+2次;(易证,略)四、回头思考(四)条件:2N>M>N且M偶N奇准备1:由于每次的引动量a-b,实际上亦由每次没翻动的M-N个硬币决定,因此可以反向考虑M-N的情况!准备2:由于最终答案必为偶数,故可以每两次捆绑作一次考察;由此易得:2(M-N)≥a1-b1+a2-b2≥-2(M-N)由准备1、准备2,再逆向观察易知此种情况等价于:M个全为反面的硬币,每次翻转其中M-N个,多少次翻成全为正面;此时必有:M(M-N)≥M>2(M-N),回到(三、推广),迎刃而解!现在你知道我为什么要放到最后了吧呵呵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:对一摞 m 枚正面朝上的硬币进行翻面,第 k 次翻上面 k 枚硬币(k=1; 2; 3; ……; m) , 翻完后再从最上面的硬币开始重复操作, 问需经过多少次翻面可 以使所有硬币重新正面朝上。 由于本问题问法存在异议,即两种翻面的方法。第一种,k 枚硬币作为整体 全部颠倒,即翻面的同时颠倒硬币顺序。第二种,每一枚硬币翻面后放回,不打 乱硬币顺序。本文将对两种观点进行探讨,得出结论。
输入 m,p=1,v=2m,i=0
m为偶数? N Y
P=(m+1)/2 V=1 i=1
P=m/2+1 V=1 i=1
V=p i=i+1
V=p i=i+1
N
P?=1
P?=1
N
V为偶数? N Y Y
V为偶数?
N
Y P=(m-v+2)/2 P=(m+v+1)/2
Y
P=(m-v+2)/2
P=(m+v+1)/2
重新正面朝上。假设得证。
模型检验
当 m=4 时,需要 2m=8 次操作。 k=0, A=1111; k=1, A=1110; k=2, A=1101; k=3, A=1010; k=4, A=0101; k=5, A=0100; k=6, A=0111; k=7, A=0000; k=8, A=1111. 符合结果。所以结论是:对 m 枚硬币,需要 2m 次翻面可以使所有硬币重新正面 朝上。
次数 硬币 ① ② ③ 0 1 1 1 1 0 1 1 2 0 1 1
表 1 三枚硬币的翻面状态 顺 3 4 5 6 序
0 0 1 ③ ① ② 1 0 1 1 0 1 0 1 1
顺 序 ② ③ ①
7 1 1 0
8 0 0 0
9 1 )=1 表示正面朝上,A(i)=0 表示反面朝上。
4
316
711
5
4
3
2 1
218 813
映射关系
3
2 1
2
1
80
72
56
114
815
经过简单的检验,大胆推测任意 m 枚硬币经过 f (m) 或者 f (m) 1 次翻面后 再次全部回到正面,其中 f (m) 可以由上述流程图获得。
以下针对第二种观点进行探讨: 问题分析
硬币有两种状态,背面朝上和正面朝上,可以分别用二进制数 0 和 1 代表。 0 代表反面朝上,1 代表正面朝上。第 k 次操作可以看做把后 k 位取反。用 A 代 表硬币的状态。A(i)代表第 i 枚硬币的状态。
后的状态。那么简单推理可知 w(m, 2 f (m)) {x1, x2 ,……, xm}, 其中xi 1 ,也 就是说翻面 2 f (m) 次后必然全部正面朝上。 但是,对多个 m 考察后发现, 在f (m)-1或者f (m) 次时一般已经成立,这 取决于具体的映射关系。 本文针对此映射关系即 f (m) 的具体表达式只做简单探讨。 (1) 尝试探求 f (m) 的表达式:
输出i
图 3 分析流程图
(2) 尝试探求何时取 f (m)-1或者f (m) :
表 4 取 f (m)-1 或者 f (m) 的简单分析
m
f (m) / m
1 2 2 2
2 2 4 3
3 3 9 9
4 3 12 11
5 5 25 24
6 6 36 35
7 4 28 28
8 4 32 31
f (m)
所需次数 对应
在 k 3 4 1 11 时达到全部正面朝上。 根据上面的例子我们有如下猜测: m 枚硬币出现循环的次数, 这是唯一由 m 以及翻面规则决定的。 f (m) : 如 f (3) 9,f (4) 12 。
w(m, n) {x1 , x2 ,……, xm }, 其中xi =xi (m, n) 1 or 0 : m 枚硬币在经历 n 次
表 2 四枚硬币的翻面状态
次 数 硬币 ① ② ③ ④ 0 1 1 1 1 1 0 1 1 1
翻面次数
2 0 1 1 1
3 0 0 1 1
4 0 0 1 1
顺 序 ④ ② ① ③
5 1 0 1 1
6 1 0 1 1
7 0 1 0 1
8 0 1 0 1
顺 序 ③ ② ④ ①
9 1 1 0 1
10 0 0 0 1
关键词:翻硬币 二进制 数学归纳法 映射
以下针对第一种观点进行探讨: 问题分析
事实上,任意一枚硬币当且仅当翻面为偶数次时才会重新正面朝上,那么问 题的本质就是翻面多少次时,所有硬币的翻面次数都为偶数次。
问题求解
本次不采用数学归纳证明之,以直观的图形及表格论述。 当硬币为三枚时,假设 A(i)=1 表示正面朝上,A(i)=0 表示反面朝上。
10
20
8
7 6
翻面次数
81
63
8 7
翻面次数
73
8
翻面次数
57 414
615
8
7 6
翻面次数
115
221
39 212 610 89 411
112
映射关系
7
6 5 4 3
30 40 50 60
70
45 27 18 36
54
映射关系
6 5
4 3 2 1
321 421 515 621 715
映射关系
5
11 1 1 1 1
12 0 0 0 0
顺 序 ① ② ③ ④
10
4 3 2
41
4 3 2
33
4 3 2
17
41
4 1
20 30 40
23 14
映射关系
26 45 16
29 37 47
1
32
1
1
表 示 翻 面 次 数 ;
图 1 四枚硬币的状态循环
表 示 第 四 枚 硬 币 ;
观察发现,在经历三轮循环(4 次+4 次+4 次)翻面后,所有硬币重新 回到初始状态的位置,并且翻面次数的奇偶性一致,在 m=4 时,三轮循环 后全部反面朝上, 那么在之前的一次翻面时, 必为全部正面朝上, 也就是说,
f (m)
f (m)-1
f (m)
f (m)-1
f (m)-1
f (m)-1
f (m)
f (m)-1
理论上只需要知道一枚硬币翻面的次数即可判断,此处限于篇幅不加讨 论,但取 f (m)-1 或者f (m) 的猜想是很可能的,但仍需深入分析。
模型检验
当 m =8 时,需要 f (m)-1 =31 次操作。
问题求解
m=1 时,显然需要 2 次操作。 m=2 时, k=0,A=11; k=1, A=10; k=2, A=01; k=3, A=00; k=4, A=11. 需要 4 次操作。 m=3 时,k=0, A=111; k=1, A=110; k=2, A=101; k=3, A=010; k=4, A=011; k=5, A=000; k=6, A=111.需要 6 次操作。 猜想:对 m 枚硬币,需要 2m 次翻面可以使所有硬币重新正面朝上。 假设:对 m 枚硬币,操作 k=2m 时,A(i)=1,i=1,2,3, ……, m。 证明: m=1 时,显然 k=2 时,A1=1. 假设成立。 假设 m=n, n≥1 时,k=2n 时, A(i)=1,i=1,2,3, ……, n,即命题成立。 当 m=n+1,n≥1 时,将第一枚硬币以下 n 枚硬币视为整体,操作 k= n+1 时, 处理完整摞硬币。此时 A(n+1)进行了 n+1 次操作,第一枚硬币以下 n 枚硬币 (即 A(n)~A(1))处理了 n 次。 此时进行处理至 k=2n+2,此时相当于上述操作重复 一次, 即 A(n+1)进行了 2n+2 次操作, 第一枚硬币以下 n 枚硬币(即 A(n)~A(1)) 处理了 2n 次。显然,A(n+1)=1,A(i)=1,i=1,2,3, ……, n 总上诉述,由数学归纳法知,对 m 枚硬币,需要 2m 次翻面可以使所有硬币
9 7 5 3 1 2 4 6 8
10 8 6 4 2 1 3 5 7 9
…… …… ……
…… …… …… …… …… …… …… 1
…… ……
一轮循环 (m 次) 后的序列
5 6 7 8 9 10 ……
…… m-5 m-3 m-1
f (m) / m
1
2
3
3
5
6
4
4
9
6
根据其基本规律设计了如下图 2 的流程图,编程语言很简单,未附上。 思路如下:首先输入硬币数 m ,指针 p 起始位置为 1,所指位置的值 V 为 m ,由于 m 的不同会导致 P(V=1)的不同,因此分情况计算 V=1 的位置 p, 然后将 P 的值赋予 V,计算 V=P 的位置,此时仍需针对 V 的奇偶性确定 P, 此后以此类推,直至 P=1,即 P 指向第一个位置。 举例以说明之。当 m =6,起始 P=1,V=6,计算的 V=1 的位置 P=4,i=1; 赋值 V=P=4,i=2,计算 V=4 的位置 P=2;赋值 V=P=2,i=3,计算 V=2 的位置 P=3;赋值 V=P=3,i=4,计算 V=3 的位置 P=5;赋值 V=P=5,i=5,计算 V=5 的位置 P=6;赋值 V=P=6,i=6,计算 V=6 的位置 P=1,输出次数为 i=6。
表 3 多枚硬币的单次循环后序列 3 4 5 6 7 8 9 枚 枚 枚 枚 枚 枚 枚 3 1 2 4 2 1 3 5 3 1 2 4 6 4 2 1 3 5 7 5 3 1 2 4 6 8 6 4 2 1 3 5 7