您的位置:首页 > 其它

古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA

2013-04-07 16:16 357 查看
/*
* 古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
*/
public class TDemo02_two {
public static void main(String[] args){
for(int i=10000;i<100000;i++){
int a = i/10000;
int b = i%10000/1000;
int c = i%10000%1000/100;
int d = i%10000%1000%100/10;
int e = i%10;
if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e){
continue;
}
int y = e*10000+d*1000+c*100+b*10+a;
if(y%i==0){
System.out.println(i+"*"+y/i+"="+y);
}
}
}
}
运行结果:
21978*4=87912
方法二:
/*
* 古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
*/
public class Demo02 {
// 检查是否是全111111...
public static boolean check(int[] b){
boolean flag = true;
for(int i=0;i<b.length;i++){
if(b[i]==0){
flag = false;
break;
}
}
return flag;
}
// 检查是否是一个五位数
public static boolean checkFive(int[] b){
boolean flag = false;
int count = 0;
for(int i=0;i<b.length;i++){
if(b[i]==1){
count++;
}
}
if(count==5) flag = true;
return flag;
}
// 得到一个五位数字
public static String values(int[] b){
StringBuffer sb = new StringBuffer();
for(int i=0;i<b.length;i++){
if(b[i]!=0){
sb.append(i);
}
}
return sb.toString();
}
// 反转 n
public static int reverse(int n){
StringBuffer sb = new StringBuffer();
sb.append(n);
sb.reverse();
return Integer.parseInt(sb.toString());
}
// 进位得到下一个数字
public static void modify(int[] b){
b[b.length-1]++;
for(int i=b.length-1;i>0;i--){
if(b[i]>1){
b[i] = 0;
b[i-1]++;
}
}
}
public static void calc(String s){
int n = Integer.parseInt(s);	// 得到一个五位数字
int r = reverse(n);	// 反转 n
if(r%n==0)	// 得到结果 n * ? = r
System.out.println(n+"*"+(r/n)+"="+r);
}
public static void allSort(char[] c,int start,int end){
char temp = 0;
if(start==end){
String s = new String(c);
if((s.charAt(0)-'0')!=0){
calc(s);	// 计算结果
}
}else{
for(int i=start;i<=end;i++){
temp = c[start];
c[start] = c[i];
c[i] = temp;
allSort(c,start+1,end);
temp = c[start];
c[start] = c[i];
c[i] = temp;
}
}
}
public static void f(int[] b){
for(;;){
if(check(b)) break;	// 检查是否是全111111...
modify(b);	// 进位,进行下一个数字的测试
if(!checkFive(b)) continue;	// 检查是否是一个五位数字
String s =  values(b);		// 得到一个五位数字
char[] c = s.toCharArray();
allSort(c,0,c.length-1);	// 全排列其中一个五位数,并计算结果
}
}
public static void main(String[] args){
int[] b = new int[10];
f(b);
}
}

运行结果:

21978*4=87912
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: