第四届蓝桥杯省赛B组 翻硬币 (Java)

阅读: 评论:0

第四届蓝桥杯省赛B组 翻硬币 (Java)

第四届蓝桥杯省赛B组 翻硬币 (Java)

题目描述

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:**oo***oooo

如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作。

输入格式

两行等长的字符串,分别表示初始状态和要达到的目标状态。

输出格式

一个整数,表示最小操作步数

数据范围

输入字符串的长度均不超过100。
数据保证答案一定有解。

输入样例1:
**********
o****o****
输出样例1:
5
输入样例2:
*o**o***o***
*o***o**o***
输出样例2:
1

解题思路

因为题目有一定有解的前提,同时,在最少操作次数的前提下,每个硬币最多只能翻一次,因此,这道题是递推的思路,从第一个硬币开始与目标相比较,如果不同则翻转,同时影响下一个硬币翻转,然后计数加一。

因为题目一定有解,所以不可能有最后一个硬币与目标不同的情况。

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(System.out);char[] begin = br.readLine().toCharArray();char[] end = br.readLine().toCharArray();br.close();int cnt = 0;//计数for (int i = 0; i < begin.length; i++) {if (begin[i] != end[i]) {//不同则翻转cnt++;//计数加一begin[i] = end[i];if (begin[i + 1] == 'o') {//翻转影响下一个硬币begin[i + 1] = '*';} else {begin[i + 1] = 'o';}}}pw.print(cnt);pw.flush();pw.close();}
}

本文发布于:2024-02-02 11:42:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170684534743568.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23