蓝桥杯练习第二日:
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
·
做了个翻硬币,五分钟码完出答案,思路简单,直接贪心从第一个到最后一个遍历,认为每次遇到的正反不对的硬币都可以通过将此硬币和下一个硬币翻转过来解决,附代码。
package greedy;
import java.util.Scanner;
public class Main1 {
public static int index = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String orgin = input.nextLine();
String result = input.nextLine();
char arr1[] = orgin.toCharArray();
char arr2[] = result.toCharArray();
int count = 0;
while (true){
if (check(arr1, arr2))
break;
else {
inverse(arr1, arr2);
count++;
}
}
System.out.println(count);
}
public static boolean check(char arr1[], char arr2[]){
for(int i = 0; i < arr1.length; i++){
if (arr1[i] != arr2[i]) {
index = i;
return false;
}
}
return true;
}
public static void inverse(char arr1[], char arr2[]){
if (arr1[index] == '*')
arr1[index] = 'o';
else
arr1[index] = '*';
if (arr1[index + 1] == '*')
arr1[index + 1] = 'o';
else
arr1[index + 1] = '*';
}
}