匪警请拨110,即使手机欠费也可拨通!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
1 2 3 4 5 6 7 8 9 = 110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
……
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
方法一:
public class Main
{
static char k[]={' ','+','-'};
public static void main(String args[]) //遍历所有
{
for(int a=0;a<3;a++)
for(int b=0;b<3;b++)
for(int c=0;c<3;c++)
for(int d=0;d<3;d++)
for(int e=0;e<3;e++)
for(int f=0;f<3;f++)
for(int g=0;g<3;g++)
for(int h=0;h<3;h++)
{
String str=""+1+k[a]+2+k[b]+3+k[c]+4+k[d]
+5+k[e]+6+k[f]+7+k[g]+8+k[h]+9;
Check(str);
}
}
public static void Check(String str)
{
String str1=str.replace(" ","");
int sum=0;
int count=0;
String str2="";char str3=' ',str4;
for(int i=0;i<str1.length();i++)
{
if(str1.charAt(i)!='-'&&str1.charAt(i)!='+')
{
str2=str2+str1.charAt(i);
}
else
{
if(count==0) {sum=Integer.valueOf(str2);} //主要用于第一个数的记录
if(count==1)
{
if(str3=='+')sum+=Integer.valueOf(str2); //举例 1+2-3 这里的str3是加号 遇到两次加减符号才做1+2这个运算
else sum-=Integer.valueOf(str2);
count=0;
}
str2=""; //为下次计数做前提
str3=str1.charAt(i); //这里才记录上面那个例子中的减号
count++;
}
}
if(str3=='+')sum+=Integer.valueOf(str2); //处理最后一个运算符
else sum-=Integer.valueOf(str2);
if(sum==110)System.out.println(str1);
}
}
public class Main
{
static char k[]={' ','+','-'};
public static void main(String args[])
{
String str="123456789";
dfs(str,1);
}
public static void dfs(String str,int n) //遍历所有
{
if(n==9)Check(str);
else
{
dfs(str.replace(n+"", n+"+"),n+1);
dfs(str.replace(n+"", n+"-"),n+1);
dfs(str,n+1);
}
}
public static void Check(String str)
{
String str1=str.replace(" ","");
int sum=0;
int count=0;
String str2="";char str3=' ',str4;
for(int i=0;i<str1.length();i++)
{
if(str1.charAt(i)!='-'&&str1.charAt(i)!='+')
{
str2=str2+str1.charAt(i);
}
else
{
if(count==0) {sum=Integer.valueOf(str2);} //主要用于第一个数的记录
if(count==1)
{
if(str3=='+')sum+=Integer.valueOf(str2); //举例 1+2-3 这里的str3是加号 遇到两次加减符号才做1+2这个运算
else sum-=Integer.valueOf(str2);
count=0;
}
str2=""; //为下次计数做前提
str3=str1.charAt(i); //这里才记录上面那个例子中的减号
count++;
}
}
if(str3=='+')sum+=Integer.valueOf(str2); //处理最后一个运算符
else sum-=Integer.valueOf(str2);
if(sum==110)System.out.println(str1);
}
}