历届试题 翻硬币 (蓝桥杯练习系统)
2016-03-15 21:37
148 查看
历届试题 翻硬币
时间限制:1.0s 内存限制:256.0MB
问题描述
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
输出格式
一个整数,表示最小操作步数。
样例输入1
**********
o****o****
样例输出1
5
样例输入2
*o**o***o***
*o***o**o***
样例输出2
1
解题思路:本来是用暴力搜索的,只得了33分==。找到一个简单的方法,将现有字符串和目标字符串一个一个进行比较,如果不同,就将初始状态的该字符改变一下,此时也要将第二个顺便改一下,以此类推的继续下去~~~~
详见代码。
时间限制:1.0s 内存限制:256.0MB
问题描述
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
输出格式
一个整数,表示最小操作步数。
样例输入1
**********
o****o****
样例输出1
5
样例输入2
*o**o***o***
*o***o**o***
样例输出2
1
解题思路:本来是用暴力搜索的,只得了33分==。找到一个简单的方法,将现有字符串和目标字符串一个一个进行比较,如果不同,就将初始状态的该字符改变一下,此时也要将第二个顺便改一下,以此类推的继续下去~~~~
详见代码。
#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; char ch1[1010],ch2[1010]; /*struct node { char ch[1010]; int step; } s,ss; queue<node>q,qq; void bfs() { q=qq; int len=strlen(ch1); strcpy(s.ch,ch1); s.step=0; q.push(s); while (!q.empty()) { s=q.front(); q.pop(); if (strcmp(s.ch,ch2)==0) { cout<<s.step<<endl; break; } for (int i=0; i<len-1; i++) { ss=s; if (ss.ch[i]=='*') ss.ch[i]='o'; else ss.ch[i]='*'; if (ss.ch[i+1]=='*') ss.ch[i+1]='o'; else ss.ch[i+1]='*'; ss.step+=1; q.push(ss); } } }*/ int main() { while (~scanf("%s%s",ch1,ch2)) { int len=strlen(ch1); int step=0; for (int i=0; i<len-1; i++) { if (ch1[i]!=ch2[i]) { ch1[i]=ch2[i]; if (ch1[i+1]=='*') ch1[i+1]='o'; else ch1[i+1]='*'; step++; } } cout<<step<<endl; } return 0; }
相关文章推荐
- C#机房重构——DataGridView控件
- Bootstrap 下拉菜单
- 06.RAID
- 07.账号管理
- 第二周作业:需求获取常见的方法是进行客户访谈,结合你的实践谈谈会遇到什么问题,你是怎么解决的?
- PCB寻找器件
- 启动程序端口被占用Address already in use: bind解决方案
- 实时分析之客户画像项目实践
- [leetcode]6. ZigZag Conversion
- 05.文件系统
- 用Python语言写Hadoop MapReduce程序Writing an Hadoop MapReduce Program in Python
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
- 第五十三天
- 关于阿里云服务器CentOS7的防火墙问题
- oracle 学习笔记 number
- C++中的单例模式(singleton)
- linux下安装tomcat
- 分数线划定
- windows 7下,给android ndk编译libcurl
- Android开发Style的使用,控件共同属性的抽取