Acwing---1208. 翻硬币

03-03 阅读 0评论

翻硬币

  • 1.题目
  • 2.基本思想
  • 3.代码实现

    1.题目

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

    Acwing---1208. 翻硬币,Acwing---1208. 翻硬币,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,我们,操作,游戏,第1张
    (图片来源网络,侵删)

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

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

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

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

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

    输入格式

    Acwing---1208. 翻硬币,Acwing---1208. 翻硬币,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,我们,操作,游戏,第2张
    (图片来源网络,侵删)

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

    输出格式

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

    数据范围

    输入字符串的长度均不超过100。

    数据保证答案一定有解。

    Acwing---1208. 翻硬币,Acwing---1208. 翻硬币,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,我们,操作,游戏,第3张
    (图片来源网络,侵删)

    输入样例1:

    **********

    o****o****

    输出样例1:

    5

    输入样2:

    *o**o***o***

    *o***o**o***

    输出样例2:

    1

    2.基本思想

    如果通过每次翻转两枚相邻硬币,能从状态一变为状态二,则两个状态之间必定有偶数个不同状态的硬币。

    模拟法:

    从最左侧开始遍历,如果该位置硬币状态与目标不同,就翻动该位置和该位置后面的两枚硬币。

    因为题目说了有解,所以遍历到倒数第二枚的时候,所有硬币状态就与目标相同了。

    3.代码实现

    import java.io.*;
    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static char[] start = new char[110], aim = new char[110];
        private static void turn(int i) {
            if (start[i] == '*') start[i] = 'o';
            else start[i] = '*';
        }
        public static void main(String[] args) throws IOException {
            start = br.readLine().toCharArray();
            aim = br.readLine().toCharArray();
            int cnt = 0;//计数
            for (int i = 0; i 
                    
                    
                    

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]