题目:填算式
请看下面的算式:
(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()