匪警请拨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 …
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
请不要使用package语句。
源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
public class lanqiao2012_9 {
static char []arr = {'1',' ','2',' ','3',' ','4',' ','5',' ','6',' ','7',' ','8',' ','9'};
static int aaa=0;
public static int transform(char[] s){
String ka = Arrays.toString(s).replace(",","").replaceAll(" ","").trim();
String result = ka.substring(1, ka.length()-1);
int INDEX = result.length();
// System.out.println(INDEX);
int [] re = new int [INDEX];
int j=0;
int i=0;
for(;i<=INDEX-1;){
if(s[j]==' '){
j++;
continue;}
re[i]=s[j]-'0';
i++;
j++;
}
int count = 0;
int sum = 0;
int index = 0;
for(int k=0;k<re.length;k++){
if(k==re.length-1){
if(count==0)
re[index]=re[k];
if(count>0){sum=0;
for(int ss=count;ss>0;ss--){
sum = sum+(int)(re[k-ss]*Math.pow(10,ss-1));
}
sum = sum*10+re[re.length-1];
re[index]=sum;}
}
else if(re[k]>0) {count++;
}
else {
for(int ss=count;ss>0;ss--){
sum = sum+(int)(re[k-ss]*Math.pow(10,ss-1));
}
re[index++] = sum;
re[index++]= re[k];
count=0;
sum=0;
}
}
// System.out.println("第二次"+Arrays.toString(re));
int res=re[0];
for(int l=1;l<=index;l=l+2){
if(re[l]==-3){
res = res -re[l+1];
}
if(re[l]==-5){
res= res +re[l+1];
}
if(re[l]==-48){
break;
}
}
// System.out.println(res);
return res;
}
public static void main(String[] args) {
dfs(arr,1);
System.out.println(aaa);
}
private static void dfs(char[] arr,int k) {
if(k==17)
{
if(transform(arr)==110){
System.out.println(arr);
aaa++;
return;
}
else return;
}
for(int i=0;i<3;i++){
if(i==0)
{arr[k]=' ';
dfs(arr,k+2);}
if(i==1)
{arr[k]='+';
dfs(arr,k+2);}
if(i==2)
{
arr[k]='-';
dfs(arr,k+2);
}
}
}