【单词博弈】

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 ? "乙赢" : "输入出错,请检查");// 输入
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值