题目http://hero.csdn.net/Question/Details?ID=351&ExamID=346
不支持Java...
public class Tst {
public static void main(String[] args) {
//思路:36?1?8:236428 = 36?:236 + 1?8:428
//典型的f(n) = c + f(n-1) 用递归
//String wStr = "36?1?8",xStr = "236428";
//String wStr = "8?3",xStr = "910";
String wStr = "32?",xStr = "345";
int num = getSubNum(wStr, "?");
System.out.println(wGlx(wStr, xStr, num));
}
private static int wGlx(String wStr, String xStr, int num) {
if("".equals(wStr)) {
return 0;
}
int index = wStr.indexOf("?");
if(index == -1) {
int w = Integer.parseInt(wStr);
int x = Integer.parseInt(xStr);
return w>x?1:0;
} else {
String wStrBefore = wStr.substring(0, index+1);
String wStrAfter = wStr.substring(index+1);
String xStrBefore = xStr.substring(0, index+1);
String xStrAfter = xStr.substring(index+1);
//System.out.println(wStrBefore + " " + wStrAfter);
//handler wStrBefore eg '23?','?'
if("?".equals(wStrBefore)) {
int nextNum = num - 1;
int tmp = Integer.parseInt(xStrBefore);
return (9-tmp)*xVy(10, nextNum) + wGlx(wStrAfter, xStrAfter, nextNum);
} else {
int wStrBeforeNum = Integer.parseInt(wStrBefore.substring(0, index));
int xStrBeforeNum = Integer.parseInt(xStrBefore.substring(0, index));
if(wStrBeforeNum < xStrBeforeNum) {
return 0;
} else if(wStrBeforeNum == xStrBeforeNum) {
int nextNum = num - 1;
int tmp = Integer.parseInt(xStrBefore.substring(index));
return (9-tmp)*xVy(10, nextNum) + wGlx(wStrAfter, xStrAfter, nextNum);
} else {
return xVy(10, num);
}
}
}
}
private static int getSubNum(String a, String b) {
int num = 0;
String str = a;
int index = a.indexOf(b);
while (index != -1) {
num++;
str = str.substring(index + b.length());
index = str.indexOf(b);
}
return num;
}
private static int xVy(int x, int y) {
int sum = 1;
for (int i = 0; i < y; i++) {
sum *= x;
}
return sum;
}
}