递归往数组中写入数字,分别组合,加,和减 满足条件的时候输出
import java.util.Arrays;
public class _2_递归_04算110 {
/**
*
匪警请拨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 static int sum(int[]Arr)
{
int sum123 = 0;
for(int i=0;i<Arr.length;i++)
{
sum123+=Arr[i];
}
return sum123;
}
public static void jisuan(int cur,int[]Arr,int le)
{
if(cur>=10)
{
//System.out.println(Arrays.toString(Arr));
if(sum(Arr)==110)
{
for(int i=0;i<Arr.length;i++)
if(Arr[i]!=0)
{
if(i!=0&&Arr[i]>0)
System.out.print("+"+Arr[i]);
else
System.out.print(Arr[i]);
}
System.out.println();
}
return ;
}
else
{
if(cur==1)
{
Arr[le]=1;
jisuan(cur+1,Arr,le);
}
else
for(int i=0;i<3;i++) //0不填 1加 2减
{
if(i==0)
{
if(Arr[le]<0)
Arr[le]=Arr[le]*10-cur;
else
Arr[le]=Arr[le]*10+cur;
}
else if(i==1)
{ le++;
Arr[le]=cur;
}
else
{
Arr[le]=-cur;
}
jisuan(cur+1,Arr,le);
if(Arr[le]>=10||Arr[le]<=-10)
Arr[le]=Arr[le]/10;
else
Arr[le]=0;
}
}
}
public static void main(String[] args) {
int[] Arr = new int[10];
jisuan(1,Arr,0);
}
}