阅读 138

试题 历届试题 翻硬币 java题解

试题 历届试题 翻硬币 java题解

问题描述

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

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

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

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

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

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


 

输入格式

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


 

输出格式

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


 

样例输入1

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


样例输出1

5


样例输入2

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


样例输出2

1


思路:看题我们可以知道只能两枚硬币一起反转然后让目标状态达到初始状态

所以很简单,只需要简单的判断当前硬币与初始硬币是否不同,然后当前硬币和当前硬币的后一个硬币进行反转就行了

在反转的时候,可以直接写一个方法来将硬币反转

                              出自:贵州电子商务职业技术学院

复制代码

 1 import java.util.Arrays; 2 import java.util.Scanner; 3  4 public class Main { 5     static int count=0; 6     static char z='*',f='o';//正面为 *  反面为 o 7     public static void main(String arg[]){ 8         Scanner input=new Scanner(System.in); 9         String a=input.next();10         String b=input.next();11         char startMod[]=a.toCharArray();12         char endMod[]=b.toCharArray();13         for (int i=0;i<startMod.length;i++){14             if (Arrays.equals(startMod,endMod))break;//如果两个字符数组相等就直接退出循环15             if (endMod[i]!=startMod[i]){//如果当前硬币和初始硬币不一样就会执行反转16                 endMod[i]=Fz(endMod[i]);17                 endMod[i+1]=Fz(endMod[i+1]);18                 count++;19             }20         }21         System.out.println(count);22     }23     public static char Fz(char s){//使用方法将硬币反转24         if (s==f)return z;25         if (s==z)return f;26         return z;27     }28 }

复制代码


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐