本文介绍蓝桥杯题目翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 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表示关,这样你在打开或关闭的时候,只要让其赋值为自身的非即可,不必额外判断当前的情况。
感谢您的阅读与耐心~ 如有错误烦请指出~ 谢谢
本文介绍蓝桥杯题目翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想。
1 螺旋藻的副作用和禁忌:螺旋藻主要含有蛋白质、脂肪、碳水化合物、纤维素、维生素、矿物质等营养成分。而且这些物质的比例合
2022年珠海市创新百强企业 创新综合实力100强、 成长100强和经济贡献100强 名单公布! 珠海欧比特宇航科技股份有限公司及子公司广东绘
中证网讯(记者黄一灵)2月10日晚间,宁波银行发布2022年业绩快报。 业绩快报显示,2022年,宁波银行全年实现营业收入578 79亿元,较上年同期增长9 6
经常项目大顺差!2022年国际收支表现强劲,短期资本外流快速收敛
用心思送礼物,不是什么礼物,只能是惊喜而已。所以,如果送的礼物是要精心准备,要让人感觉到你对她的关心,让她感觉你的用心。
【强调不降价却遭打脸?老车主要补偿咋办?这些问题秦力洪都回答了!】就在上周(2月2日),有媒体报道称,蔚来开启降价促销,降价方案包括赠送价
医药类的股票有哪些?医药板块各龙头股一览表:1 医药总龙头:600276恒瑞医药2 中药总龙头:000538云南白药3 新药实验龙头:603259药明康德4 糖尿病龙头: 600867 通化东宝5 大输液龙头: 002422科伦
通货膨胀对股市的影响都有哪些?在高度的通货膨胀的影响下,国家和政府为了应对通货膨胀带来的种种影响,势必会采取紧缩的货币政策,提高银行的存款利率,这样对股市的影响很大,会在短期内,使得股票价格下跌。通
怎样购买基金?1、挑选交易目标:能够从私募基金经理、销售业绩、最大回撤三个层面挑选高品质基金经理。基金经理是基金的管理者,上班时间越久越好;销售业绩是基金创立至 2、定投:对购买者的投资要求不高,只需
如何看kdj线?1、KD线数值在80往上的是时候就是超买区,20以下的数值表示的是超卖区域;2、KD线的数值的浮动变化异常的时候,代表着股市会产生变动;3、K线向上穿过了D线的时候,表示是可以买进;4、KD线与股价的走向
据中国理财网2月10日消息,首批个人养老金理财产品名单公布,共计有3家机构7只产品。其中工银理财有4只、中邮理财2只、农银理财1只。
激光器件概念股有哪些?激光器件行业概念股票有: 光智科技、光库科技、福晶科技。福晶科技(002222):2月3日收盘消息,福晶科技002222收盘涨0 76%,报17 280。市值73 87亿元。2022年第三季度季报显示,福晶科技公
在乔治弗洛伊德(GeorgeFloyd)在被警察拘留期间去世之后,美国各地爆发了抗议活动,以抗议警察的野蛮行径。尽管
2月10日,高桥石化苯酚价格上调150执行7950元 吨,此价格自2月10日起执行。终端工厂递盘增加,交投意向好转,持货商报盘走高,江苏周边商谈在8000元
企业产能生产情况兖矿国泰100万吨 年日产3000吨华鲁恒升60万吨 年日产1500吨2月10日,山东地区醋酸企业周边送到价在3200元 吨左右,下游拿货积极性
慧博云通02月10日主力资金净流出1 28亿元,涨跌幅为-11 35%,主力净量(dde大单净额 流通股)为-11 70%,两市排名4917 4917。投顾分析:该股今日主力净量为负
如何抓好今冬明春市场监管领域安全生产工作? 达州市
12月16日,达州市达川区市场监督管理局下发《市场监管领域今冬明春安全生产隐患大排查大整治行动工作方案》,要求下属各部门从2022年12月16日起至2023年3月15日,全面聚焦城镇燃气、特种设备、危险化学品、烟花爆
《2021年度中国对外直接投资统计公报》发布 中国对外
金港高速公路连接柬埔寨首都金边和该国最大深水海港西哈努克港,是中国路桥按建造—运营—移交模式投资的项目,采用中国设计及质量标准,横跨5个省份,全长187 05公里,双向四车道。金港高速公路通车后,从金边到
总体保持稳定恢复态势 工业经济展现较强韧性
2022年1至10月,浙江省宁波市811家汽车制造业规上工业总产值2646 8亿元,同比增长14 2%。图为11月19日,工人在领克汽车宁波梅山工厂的总装车间作业。今年以来,受疫情多发散发、市场需求不振等因素影响,国内工业
14家券商获首批个人养老金代销展业资格 多家券商透露
11月18日晚间,证监会发布《个人养老金基金销售机构名录》,共37家机构入围,其中券商14家,银行16家,独立基金销售机构7家。14家券商包括华泰证券、中信证券、海通证券、国泰君安、申万宏源、中金财富和长江证券
北京再担保承保规模超6000亿 覆盖中小微企业超过16万
北京中小企业融资再担保有限公司(简称北京再担保)发布的最新数据显示,成立14年来已累计承保规模超过6000亿元,覆盖中小微企业(农户)超过16万户次,积极推动北京市中小微企业融资规模不断扩大。北京再担保2008年
Copyright @ 2001-2023 www.u74.cn All Rights Reserved 商业时报网 版权所有
网站信息内容, 均为相关单位具有著作权,未经书面授权,转载注明出处
未经商业时报网书面授权,请勿建立镜像,转载请注明来源,违者依法必究