题目是这样的
  a b c d e
+ 2 0 0 8 5
------------
  A B C D E
a,b,c,d,e,A,B,C,D,E必须是0-9的数字,且不可以重复。
下面是我的程序:public class funnyplay {
  public static void main(String args[])
  {
int a,b,c,d,e,A,B,C,D,E,i,j;//定义各个变量
int b1,c1,d1,e1;
int num1,num2;
num1=num2=0;
int[] p= new int[10];//十个元素的数组来存放a,b,c,d,e,A,B,C,D,E
for(e=0;e<=9;e++)
{
E=(e+5)%10;
e1=(e+5)/10;//进位
p[0]=e;
p[5]=E;
for(d=0;d<=9;d++)
{
D=(d+8+e1)%10;
d1=(d+8+e1)/10;//进位
p[1]=d;
p[6]=D;
for(c=0;c<=9;c++)
{
C=(c+d1)%10;
c1=(c+d1)/10;//进位
p[2]=c;
p[7]=C;
for(b=0;b<=9;b++)
{
B=(b+c1)%10;
b1=(b+c1)/10;//进位
p[3]=b;
p[8]=B;
for(a=1;a<=9;a++)
{
A=(a+b1)%10;
p[4]=a;
p[9]=A;
if((a+b1)/10!=0)
continue;//如果到第五位还有进位,就继续a++
//下面一段注释了的语句出错了;
/*P:
{
for(i=0;i<=9;i++)
{
for(j=i+1;j<=9;j++)
{
if(p[i]==p[j])
break P;  //判断数组中是否有重复,如果有的话就终止以下所有操作,继续a++
}
}
for(i=4;i>=0;i--)
{
num1=num1*10+p[i];  //num1=abcde
}
for(i=9;i>=5;i--)
{
num2=num2*10+p[i];   //num2=ABCDE
}
System.out.println("解是:"+num1+"和"+num2);
}*/
}
}
}
}
}
}}

解决方案 »

  1.   

    我觉得这个题目要挖掘隐含条件啊  比如一个数和20085相加  那么结果肯定是大于20085的  对吧?那么结果的最小值就是20134了  而结果最大值也只可能是98765  所以这个地方你能得出来结果的范围是[20134, 98765]  所以你的加数  最大值也就是98765-20085,  总之了  这只是一个思路   范围还可以缩小的  不要一上来就for循环  
      

  2.   

      我想知道我这样判断有没有错呢!public class funnyplay2 {
    public static int panduan(int[] n)
    {
    for(int m=0;m<=9;m++)
    {
    for(int r=m;r<=9;r++)
    {
    if(n[m]==n[r])
         return 0;
    }
    }
    return 1;
    }
    public static void main(String args[])
    {
    int a,b,c,d,e,A,B,C,D,E,i,j;//定义各个变量
    int b1,c1,d1,e1;
    int num1,num2;
    num1=num2=0;
    int[] p= new int[10];//十个元素的数组来存放a,b,c,d,e,A,B,C,D,E
    for(e=0;e<=9;e++)
    {
    E=(e+5)%10;
    e1=(e+5)/10;//进位
    p[0]=e;
    p[5]=E;
    for(d=0;d<=9;d++)
    {
    D=(d+8+e1)%10;
    d1=(d+8+e1)/10;//进位
    p[1]=d;
    p[6]=D;
    for(c=0;c<=9;c++)
    {
    C=(c+d1)%10;
    c1=(c+d1)/10;//进位
    p[2]=c;
    p[7]=C;
    for(b=0;b<=9;b++)
    {
    B=(b+c1)%10;
    b1=(b+c1)/10;//进位
    p[3]=b;
    p[8]=B;
    for(a=1;a<=9;a++)
    {
    A=(a+b1)%10;
    p[4]=a;
    p[9]=A;
    if((a+b1)/10!=0)
    continue;//如果到第五位还有进位,就继续a++
    /*j=panduan(p);
    if(j==0)          //这里调用判断函数
    continue;*/
    for(i=4;i>=0;i--)
    {
    num1=num1*10+p[i];  //num1=abcde
    }
    for(i=9;i>=5;i--)
    {
    num2=num2*10+p[i];   //num2=ABCDE
    }
    System.out.println("解是:"+num1+"和"+num2);
    }
    }
    }
    }
    }
    }}
      

  3.   

    ...能否用迭代的方法解决呢?这么多for ..看得头晕。。