在123456789之间插入+号或者-号,或者不加,使这个算术表达式的结果恰好是110
package JiaNan;
public class Test
{
public static String operate[] = new String[]{"+","-"," "};
public static void dfs(int m,int n,StringBuffer source) //m是空间树层数
{ //n是待求和数字
if(m == 17)
{
if(sum(source) == n)
System.out.println(source.toString().replace(" ","")+"=110");
return;
}
else
{
for(int i = 0;i < 3;i++)
{
source.insert(m,operate[i]);
dfs(m+2,n,source);
source.delete(m,m+1);
}
}
}
public static int sum(StringBuffer source)
{
int sum = 0,start = 0;
char oper =' ';
String str = source.toString().replace(" ","");
for(int i = 0;i <= str.length();i++)
{
if(i==str.length() || str.charAt(i)=='+' || str.charAt(i)=='-')
{
sum = Integer.parseInt(str.substring(start,i));
if(i != str.length())
oper = str.charAt(i);
start = i+1;
break;
}
}
for(int i = start;i <= str.length();i++)
{
if(i==str.length() || str.charAt(i)=='+' || str.charAt(i)=='-')
{
if(oper == '+')
sum += Integer.parseInt(str.substring(start,i));
else
sum -= Integer.parseInt(str.substring(start,i));
start = i+1;
if(i != str.length())
oper = str.charAt(i);
}
}
return sum;
}
public static void main(String args[])
{
StringBuffer source = new StringBuffer("123456789");
dfs(1,110,source);
}
}
/*
1+2+34+5+67-8+9=110
1+234-56-78+9=110
1-2+3+45-6+78-9=110
12+3+45+67-8-9=110
12+34+56+7-8+9=110
12-3+4-5+6+7+89=110
123+4+5+67-89=110
123+4-5-6-7-8+9=110
123-4+5-6-7+8-9=110
123-4-5+6+7-8-9=110
*/