黑马程序员技术交流社区

标题: 阶乘问题,求大神看看哪里错了 [打印本页]

作者: zheng72566    时间: 2015-5-26 09:43
标题: 阶乘问题,求大神看看哪里错了
1.求解方程  x!+y!+z!=xyz(如1!+4!+5!=145)  的自然数根(其中x,y,z,a都代表1~9之间的数字)。
  1. class Lianxi
  2. {
  3.    public static void main(String[] args)
  4.         {      int number=0,sum1=1,sum2=1,sum3=1;
  5.                  for (int x=1; x<10; x++)
  6.                  {
  7.                          sum1=sum1*x;
  8.                          for (int y=1;y<10;y++ )
  9.                          {
  10.                                  sum2=sum2*y;
  11.                                  for (int z=1;z<10;z++ )
  12.                                  {
  13.                                          sum3=sum3*z;
  14.                                          number=sum1+sum2+sum3;
  15.                                          if (number==x*100+y*10+z)
  16.                                          {
  17.                                                 System.out.println("X="+x+"\t"+"Y="+y+"\t"+"Z="+z);
  18.        
  19.                                          }
  20.                                  }
  21.                          }
  22.                  }
  23.         }
  24. }
复制代码

作者: zheng72566    时间: 2015-5-26 09:46
编译没问题,执行不出结果
作者: 半世心修    时间: 2015-5-26 09:54
我勒个去 把范围设大一点
立马解决
10改成100看看
作者: 小悟空et    时间: 2015-5-26 10:57
z的第一次从1循环到9之后,因为sum3定义在循环外面,sum3的值在下次循环的时候会接着乘,就是会从9!开始,继续乘以1,乘以2.。。。。

好理解的方法,就是在x的循环中,对sum2和sum3重新赋值回1.在y的循环中对sum3重新赋值1

  1. class Lianxi
  2. {
  3.    public static void main(String[] args)
  4.         {      int number=0,sum1=1,sum2=1,sum3=1;
  5.                  for (int x=1; x<10; x++)
  6.                  {
  7.                          sum1=sum1*x;
  8.                          sum2=1;
  9.                          sum3=1;
  10.                          for (int y=1;y<10;y++ )
  11.                          {
  12.                                  sum2=sum2*y;
  13.                                  sum3 = 1;
  14.                                  for (int z=1;z<10;z++ )
  15.                                  {
  16.                                          sum3=sum3*z;
  17.                                          number=sum1+sum2+sum3;
  18.                                          if (number==(x*100+y*10+z))
  19.                                          {
  20.                                                 System.out.println("X="+x+"\t"+"Y="+y+"\t"+"Z="+z);
  21.         
  22.                                          }
  23.                                  }
  24.                          }
  25.                  }
  26.         }
  27. }
复制代码

作者: 志行    时间: 2015-5-26 11:25
楼上正解~~~~~
作者: q617939894    时间: 2015-5-26 14:02
不错看看,学习了
作者: 791180016    时间: 2015-5-26 15:19
水军来学习
作者: zheng72566    时间: 2015-5-26 16:11
谢谢大家
作者: l598790586    时间: 2015-5-26 17:13
水军来学习
作者: kmlitheima    时间: 2015-5-26 17:13
把功能抽取出来啊!
class JavaTest
{
        public static void main(String[] args)
        {
                Fuction f=new Fuction();
                for(int x=1;x<=9;x++)
                        for(int y=0;y<=9;y++)
                        for(int z=0;z<=9;z++)
                     if((f.function(x)+f.function(y)+f.function(z))==(100*x+10*y+z))
                                System.out.println("X="+x+"\t"+"Y="+y+"\t"+"Z="+z);

        }
}
class  Fuction
{

public        int function(int j){
                int sum=1;
                if(j==0)
                        return 1;
                else{
                        for(int i=1;i<=j;i++){
                                sum*=i;
                        }
                        return sum;
                }



        }
}
作者: zheng72566    时间: 2015-5-27 12:11
小悟空et 发表于 2015-5-26 10:57
z的第一次从1循环到9之后,因为sum3定义在循环外面,sum3的值在下次循环的时候会接着乘,就是会从9!开始, ...

明白了,谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2