全球播报:蓝桥杯题目——翻硬币无需修改‘*’与’o‘的特殊解法及其所包含的思想
本文介绍蓝桥杯题目——翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。
本文介绍蓝桥杯题目——翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
【资料图】
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作。
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。
输出格式
一个整数,表示最小操作步数
数据范围
输入字符串的长度均不超过100。
数据保证答案一定有解。
输入样例
**********o****o****
输出样例
5
假设这样一组输入:
**********o*********
因为每次要翻动两个硬币,想单独地把第一个硬币变成o,就一定会带来副作用(影响其他的硬币),即使这个硬币不在第一个位置。
也就意味着我们用任何方法也不能单独地将一个硬币反转,必须要有另一个同样需要反转的硬币。
因此,题目给的数据中,两个字符串不同之处的数量一定为偶数,否则第一个字符串无论怎样翻转也不能达到第二个字符串(目标)的状态。
因为每个硬币只有正、反两种可能,所以一组硬币(一次反转两个,因此称两个硬币为一组)如果已经被反转一次了,如果再将其反转回来,就会使得这两次反转都无意义。
一般地说,就像同类费解的开关和点灯这种每个位置只有两种选择的问题一样,同一个位置,操作两次,都是无意义的。
在本题中,同一组硬币,我们最多只会翻转一次,拿题目给出的数据举例,我们的目的是把一号和六号的硬币反转成为o。
第一次,我们反转前两个。
第二次,我们的目的是将2号的o变成*,因为1和2这一组已经被反转一次,因此第二次我们只能选择2和3这一组。
第三次,目的是反转3号,但23这一组已被反转,因此只能反转34这一组。
第四次,同理,只能反转45这一组。
第五次,当反转56这一组时会发现,反转后的状态刚好就是我们所求的状态,这正是刚才解题思维中说到的有另一个需要反转的硬币(6号)来弥补之前的硬币(1号)反转所带来的副作用。
此时你会发现,从1号到6号,其包含的每一组我们都反转了一次,其间的每一个硬币我们都反转了两次,只有这样才能刚刚好使得两个不同之处变为相同。
原因:其间的硬币反转两次,相当于没反转;其包含的最开始和最后一个硬币,只反转了一次,因此改变的正反面。
因此,对于这题我们只需要找到每两个不同之处之间有多少个硬币,就可以推算出将这两个不同之处同时反转,需要消耗几步。
如果做题时没有发现每同时反转两个不同之处所消耗的步数等于其间的硬币数+1这条规律,那么大概率会用模拟法做,那无疑就使代码更加复杂。
一数曾说过下文类似的一句话:像这种看起来很简单,但是数据很大,暴力法做不了的;看起来像一般性题,但一般性方法做不了的,通常在题目中都有隐含的条件没有发现,一旦发现,此类题目将特别简单。
首先,写出主函数和用来输入输出的函数。
int main(){char str1[120];gets_s(str1);char str2[120];gets_s(str2);int time =sta(str1, str2);printf("%d", time);return 0;}
随后对sta函数进行实现。
我们要统计的数目是每一组不同之处之间的硬币数,因此设置一个变量flag,当其为1时代表遇到了一组不同中的第一个不同,此时开始统计数目,当其为-1时,代表遇到了一组不同中的第二个不同,此时不统计数目。
int sta(char* str1, char* str2){int count = 0;int flag = -1;//是否开启统计while (*str1 != "\0"){if (*str1 != *str2){flag *= -1;}if (flag==1){count++;}str1++;str2++;}return count;}
可见,代码中并没有对字符串的任何操作,极大地减轻了代码量。
在实现sta函数时,并没有将flag的初始值设为0,而是设为了-1。
这样做可以在开启或关闭统计时直接让其乘以-1即可,不用再判断flag此时是哪一种情况。
亦或者在用模拟法的时候,表示正面,o 表示反面,那么你在反转时要先判断当前位置是 还是 o,但是如果用1表示正面,-1表示反面,你在反转的时候不需要判断,只需要让其乘以-1即可。
亦或者像费解的开关那样,用1表示开,0表示关,这样你在打开或关闭的时候,只要让其赋值为自身的非即可,不必额外判断当前的情况。
感谢您的阅读与耐心~ 如有错误烦请指出~ 谢谢
关键词: 编程算法
本文介绍蓝桥杯题目——翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。
房地产企业融资热潮继续,这一次轮到了行业龙头万科A(000002 SZ)。股价一度跌回七年前的万科抛出了150亿元的增发计划。目前万科A股和H股都处于
2022年陕西上市公司体量持续壮大,
1、“肩”,现代汉语规范一级字(常用字),普通话读音为jiān,最早见于商朝甲骨文中,在六书中属于象形字。2、“肩”的基
1、《大唐双龙传》讲述了隋末群雄割据年代,寇仲及徐子陵两个小混混,凭着初生之犊的勇气,在乱世的洪流中力争上游。2、江湖传
为推动石墨产业实现高质量发展,黑龙江省工业和信息化厅日前起草了《黑龙江省支持石墨企业应用转化新技术实施细则》《黑龙江省支持石墨深加工
日前,省工业和信息化厅制定印发《云南省优质中小企业梯度培育管理实施细则(暂行)》(以下简称《实施细则》)。《实施细则》明确,将通过云
男生嘛,他平时喜欢打扮,打扮,你也就送给他一个打扮的球衣或是一些化妆品,这个年龄的男生都喜欢打扮,送一些比较喜欢打扮的礼
送什么都可以,只要心意就好了,什么都好,重要的是真情好!。送生日蛋糕吧~送她个包包,女孩子都喜欢吃巧克力,不管是男女
如果她对你有好感,你应该送一只口红给她,如果她不喜欢你,那么你就应该送她一个包包,她一定会很开心的,你只要她喜欢你了,那
1、[编辑本段]读音 yǎnyán[编辑本段]部首笔画 部首:行, 部外笔画:3, 总笔画:9。2、 英文:deaelap;redunant;
要说德云社哪个演员最让人羡慕,无疑是侯震了,因为侯震在德云社是仅次于郭德纲于谦的人,地位很高,德云社的演员都对他尊敬无比。作为郭德纲
一、题文药酒是在哪个朝代之后出现的?二、解答唐代本文到此结束,希望对大家有所帮助。
女朋友找你要买礼物该不该给,你要是经常给的人打点时候,要先问一下你女朋友她的意见,如果没有给就给她买东西,不过要给她个惊
今年礼物送领导这些好,在我们中国的传统文化的领导,他们都是这样的人了。我们不在一个城市打工,而且和朋友相隔两地,也很熟,
要提升中小投资者的获得感,就必须重视股市投资功能的发挥,让投资者能在股市中获得必要的投资回报。对那些因为违法违规问题导致退市的公司,
心机女送男生衣服,不能吃饭,因为心里没有什么,只要是心理,心里都很开心,心里没有你。送什么礼物最能代表心意,又有寓意的礼
土特产礼品袋,我们的特产是一种礼品盒,我们就来折一下,看看有没有合适的,有什么礼物是合适的。每个土特产,如果能加上一点小
支付宝花呗大家用了就需要还款的,但是,有些人因为目前的资金周转困难,所以会更花呗协商还款,按协商时间来还,但是,如果还款出现了二次违
QQ是我们常用的社交和办公软件之一,QQ空间浏览量越多空间的人气也就越高,那么qq浏览次数算本人吗?一起来看看吧~
1、银鲳,Pampusargenteus,亦称“镜鱼”,属鱼产形目,鲳亚目鲳科鱼类。2、体形侧偏,呈卵圆形,银灰色,头小,吻圆,头胸相连明显,口、眼都
三十多岁女人句子合集30句1 人在旅途,一定要让自己活的很优雅!2 我们是国家的主人,应该处处为国家着想。3 目标和信念给人以持久的动力,它
“能人回归”激活了乡村……(主题)工人日报-中工网记者邹明强通讯员王世成日前,在湖北省十堰市郧阳区,一场场返乡能人座谈会正陆续召开,抢
众所周知,随着互联网快速发展,企业的品牌营销方式也不断改变,去适应新的复杂的营销环境。互联网具有传输快、范围广、成本低等优点。当企业品牌
23东莞银行CD019发布发行公告
Copyright 2015-2022 欧洲酒业网 版权所有 备案号:沪ICP备2022005074号-23 联系邮箱: 58 55 97 3@qq.com