暴力代码
列举每种翻动方法,有例子卡住了,不看了!!
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
private static char[] origin;
private static char[] backup;
private static char[] target;
private static int n,cnt;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
origin = scanner.next().toCharArray();
target = scanner.next().toCharArray();
n = origin.length;
backup = new char[n];
work();
scanner.close();
}
private static void work() {
copyAToB(origin, backup);
int res = 1100;
for(int i = 0 ; i < 1<<(n-1); i++){
cnt=0;
copyAToB(backup, origin);
for(int k = 0; k < n; k++){
if(((i>>k) & 1) == 1){
turn(k);
cnt++;
}
}
boolean flag = true;
for(int k = 0 ; k < n; k++){
if(origin[k] != target[k]) flag = false;
}
if(flag) res = Math.min(res, cnt);
}
System.out.println(res);
}
private static void turn(int x) {
if(origin[x] == '*') origin[x] = 'o';
else origin[x] = '*';
if(origin[x+1] == '*') origin[x+1] = 'o';
else origin[x+1] = '*';
}
private static void copyAToB(char[] A, char[] B){
for(int i = 0 ; i < A.length; i++){
B[i] = A[i];
}
}
}
C++代码
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
char start[N], aim[N];
void turn(int i)
{
if (start[i] == '*') start[i] = 'o';
else start[i] = '*';
}
int main()
{
cin >> start >> aim;
n = strlen(start);
int res = 0;
for (int i = 0; i < n - 1; i ++ )
if (start[i] != aim[i])
{
turn(i), turn(i + 1);
res ++ ;
}
cout << res << endl;
return 0;
}