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


    /*
     * 古堡算式
        福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
        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
  • 相关阅读:
    【转】你刚才在淘宝上买了一件东西【技术普及贴】
    Hibernate使用自定义脚本替换注解或者xml文件中的自动生成表结构
    北京地铁和广州地铁之感想
    使用eclipse开发工具与hibernate开发者为开源一起做贡献
    hdu 1159 Common Subsequence(最长公共子序列LCS)
    题解报告:hdu 2059 龟兔赛跑
    循环顺序队列模拟病人看病程序
    题解报告:hdu 1060 Leftmost Digit
    ACM_求N^N的最高位数
    ACM_Encoding
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3006028.html
Copyright © 2020-2023  润新知