import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* @author eul_82
* @param map
* 保存已确定输赢的串,后继无论甲还是乙,在选择过程中再碰到该串,可以跳过计算,直接提取输赢结果
* @date 2013-12-09
*/
public class WordGame {
public static Map<String, Integer> map = new HashMap<String, Integer>();
public static int who(String in) {
int len = in.length();
if (in == null || len < 1 || len > 16)
return -1;
if (strictlyIncrease(in) == 1)
return -1;
for (int i = 0; i < len; i++) {
if (in.charAt(i) < 'a' || in.charAt(i) > 'z')
return -1;
}
return who0(in, 1, "");
}
/*
* @param in:本次所选择的单词
*
* @param next_one:下一次该谁选择,=1表示下一次该甲选择,=0表示下一次该乙选择
*
* @blank:仅供调试用的参数
* 函数功能说明:以in为初始输入;若next_one=1,则该函数返回当乙初始选择单词in后,甲最终的输赢结果,返回1表明甲赢,返回0表明甲输。
* 若next_one=0,则该函数返回当甲初始选择单词in后,甲最终的输赢结果,返回1表明甲赢,返回0表明甲输。
*/
public static int who0(String in, int next_one, String blank) {
int len = in.length();
for (int j = 0; j < len; j++) {
String newin = delOneChar(in, j);
if (next_one == 1) {
if (map.containsKey(newin)) {
if (map.get(newin) == 1)
return 1;
if (map.get(newin) == 0)
continue;
} else if (strictlyIncrease(newin) == 1) {
return 1;
} else if (who0(newin, 0, blank + " ") == 1) {
if (!map.containsKey(newin))
map.put(newin, 1);
return 1;
}
if (!map.containsKey(newin))
map.put(newin, 0);
if (j == len - 1)
return 0;
continue;
} else {
if (map.containsKey(newin)) {
if (map.get(newin) == 1)
return 0;
if (map.get(newin) == 0)
continue;
}
if (strictlyIncrease(newin) == 1) {
return 0;
}
if (who0(newin, 1, blank + " ") == 0) {
if (!map.containsKey(newin)) {
map.put(newin, 1);
}
return 0;
}
if (!map.containsKey(newin)) {
map.put(newin, 0);
}
if (j == len - 1) {
return 1;
}
continue;
}
}
if (next_one == 1) {
return 0;
} else {
return 1;
}
}
public static int strictlyIncrease(String in) {
int len = in.length();
if (in != null && len == 1)
return 1;
int result = 1;
for (int j = 0; j < len - 1; j++) {
if (in.charAt(j) >= in.charAt(j + 1))
result = 0;
}
return result;
}
public static String delOneChar(String in, int index) {
StringBuffer s = new StringBuffer(in);
return s.deleteCharAt(index).toString();
}
public static void main(String args[]) {
int result = who("ylfpbnpljvrvipy");
System.out
.println(result == 1 ? "甲赢" : result == 0 ? "乙赢" : "输入出错,请检查");// 输入
}
}
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* @author eul_82
* @param map
* 保存已确定输赢的串,后继无论甲还是乙,在选择过程中再碰到该串,可以跳过计算,直接提取输赢结果
* @date 2013-12-09
*/
public class WordGame {
public static Map<String, Integer> map = new HashMap<String, Integer>();
public static int who(String in) {
int len = in.length();
if (in == null || len < 1 || len > 16)
return -1;
if (strictlyIncrease(in) == 1)
return -1;
for (int i = 0; i < len; i++) {
if (in.charAt(i) < 'a' || in.charAt(i) > 'z')
return -1;
}
return who0(in, 1, "");
}
/*
* @param in:本次所选择的单词
*
* @param next_one:下一次该谁选择,=1表示下一次该甲选择,=0表示下一次该乙选择
*
* @blank:仅供调试用的参数
* 函数功能说明:以in为初始输入;若next_one=1,则该函数返回当乙初始选择单词in后,甲最终的输赢结果,返回1表明甲赢,返回0表明甲输。
* 若next_one=0,则该函数返回当甲初始选择单词in后,甲最终的输赢结果,返回1表明甲赢,返回0表明甲输。
*/
public static int who0(String in, int next_one, String blank) {
int len = in.length();
for (int j = 0; j < len; j++) {
String newin = delOneChar(in, j);
if (next_one == 1) {
if (map.containsKey(newin)) {
if (map.get(newin) == 1)
return 1;
if (map.get(newin) == 0)
continue;
} else if (strictlyIncrease(newin) == 1) {
return 1;
} else if (who0(newin, 0, blank + " ") == 1) {
if (!map.containsKey(newin))
map.put(newin, 1);
return 1;
}
if (!map.containsKey(newin))
map.put(newin, 0);
if (j == len - 1)
return 0;
continue;
} else {
if (map.containsKey(newin)) {
if (map.get(newin) == 1)
return 0;
if (map.get(newin) == 0)
continue;
}
if (strictlyIncrease(newin) == 1) {
return 0;
}
if (who0(newin, 1, blank + " ") == 0) {
if (!map.containsKey(newin)) {
map.put(newin, 1);
}
return 0;
}
if (!map.containsKey(newin)) {
map.put(newin, 0);
}
if (j == len - 1) {
return 1;
}
continue;
}
}
if (next_one == 1) {
return 0;
} else {
return 1;
}
}
public static int strictlyIncrease(String in) {
int len = in.length();
if (in != null && len == 1)
return 1;
int result = 1;
for (int j = 0; j < len - 1; j++) {
if (in.charAt(j) >= in.charAt(j + 1))
result = 0;
}
return result;
}
public static String delOneChar(String in, int index) {
StringBuffer s = new StringBuffer(in);
return s.deleteCharAt(index).toString();
}
public static void main(String args[]) {
int result = who("ylfpbnpljvrvipy");
System.out
.println(result == 1 ? "甲赢" : result == 0 ? "乙赢" : "输入出错,请检查");// 输入
}
}