紧急求助,一个Java的问题,程序中错误的地方就是被我注释掉的地方,希望各位高手帮忙一下

xtfusljj 2008-11-11 01:39:12
题目是这样的
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);
}*/
}
}
}
}
}
}

}
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzy521hj 2008-11-11
  • 打赏
  • 举报
回复
UP
Crieby 2008-11-11
  • 打赏
  • 举报
回复
...能否用迭代的方法解决呢?这么多for ..看得头晕。。
xtfusljj 2008-11-11
  • 打赏
  • 举报
回复
我想知道我这样判断有没有错呢!

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);
}
}
}
}
}
}

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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧