蓝桥杯国赛之填算式

题目:填算式

请看下面的算式:

(ABCD - EFGH) * XY = 900

每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0。

比如,(5012 - 4987) * 36 就是一个解。

请找到另一个解,并提交该解中 ABCD 所代表的整数。

请严格按照格式,通过浏览器提交答案。
注意:只提交 ABCD 所代表的整数,不要写其它附加内容,比如:说明性的文字。

答案:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.Date;


public class Main
{
    public static int[] num = {0,1,2,3,4,5,6,7,8,9};
    public static int length = num.length;
    public static boolean[] flag = new boolean[10];
    public static int[] target = new int[10];
    public static void main(String[] args)
    {
        dfs(0);
    }
    public static  void dfs(int d)
    {
        //判断
        if(target[0] != 0 && target[4] != 0 && target[8] != 0)
        {
            if((Integer.parseInt(""+target[0]+target[1]+target[2]+target[3]) - Integer.parseInt(""+target[4]+target[5]+target[6]+target[7]))
                    * Integer.parseInt(""+target[8]+target[9]) == 900)
            {
                System.out.println(Integer.parseInt(""+target[0]+target[1]+target[2]+target[3]) +" - " + Integer.parseInt(""+target[4]+target[5]+target[6]+target[7])+ " * "+Integer.parseInt(""+target[8]+target[9]));
            }
        }
//      for遍历,选择,递归,还原
        for(int i = 0; i < length; i++)
        {
            if(!flag[i])
            {               
                target[d] = num[i];
                flag[i] = true;
                dfs(d + 1);
                flag[i] = false;
            }
        }
    }
}



4057 - 3982 * 12
5012 - 4987 * 36
5037 - 4962 * 12
6048 - 5973 * 12

心得:

利用Integer类的方法,把字符连接起来当做数字使用。
public static void main(String[] args)
    {
        System.out.println(Integer.parseInt(""+'1'+ '3') -Integer.parseInt(""+'1'+ '7') );
    }

-4


public static void main(String[] args)
    {
//      二进制转十进制  
        System.out.println("二进制转十进制");
        System.out.println(Integer.valueOf("0101110",2).toString());  
//      十进制转成二进制          
        System.out.println("十进制转成二进制");
        System.out.println(Integer.toBinaryString(74));  
//      二进制转八进制--->二进制先转十进制,十进制再转八进制
        int shi = Integer.valueOf("0101110",2);
        System.out.println("二进制转八进制--->二进制先转十进制,十进制再转八进制");
        System.out.println(Integer.toOctalString(shi));
//      八进制转二进制
        System.out.println("八进制转二进制--->八进制先转十进制,十进制再转二进制");
        shi = Integer.valueOf("777",8);
        System.out.println(Integer.toBinaryString(shi));
        System.out.println("二进制转十六进制--->二进制先转十进制,十进制再转十六进制");
        shi = Integer.valueOf("0101",2);
        System.out.println(Integer.toHexString(shi));
        System.out.println("十六进制转二进制--->十六进制先转十进制,十进制再转二进制 ");
        shi = Integer.valueOf("FED",16);
        System.out.println(Integer.toBinaryString(shi));
    }


二进制转十进制
46
十进制转成二进制
1001010
二进制转八进制--->二进制先转十进制,十进制再转八进制
56
八进制转二进制--->八进制先转十进制,十进制再转二进制
111111111
二进制转十六进制--->二进制先转十进制,十进制再转十六进制
5
十六进制转二进制--->十六进制先转十进制,十进制再转二进制 
111111101101


十进制转成十六进制:   

Integer.toHexString(int i)   

十进制转成八进制   

Integer.toOctalString(int i)   

十进制转成二进制   

Integer.toBinaryString(int i)   

十六进制转成十进制   

Integer.valueOf("FFFF",16).toString()   

八进制转成十进制   

Integer.valueOf("876",8).toString()   

二进制转十进制   

Integer.valueOf("0101",2).toString()   

猜你喜欢

转载自blog.csdn.net/qq_37905259/article/details/80570159