A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

10 个回复

倒序浏览
编译没问题,执行不出结果
回复 使用道具 举报
我勒个去 把范围设大一点
立马解决
10改成100看看
回复 使用道具 举报
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. }
复制代码
回复 使用道具 举报 1 0
楼上正解~~~~~
回复 使用道具 举报
不错看看,学习了
回复 使用道具 举报
水军来学习
回复 使用道具 举报
谢谢大家
回复 使用道具 举报
水军来学习
回复 使用道具 举报
把功能抽取出来啊!
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;
                }



        }
}
回复 使用道具 举报
小悟空et 发表于 2015-5-26 10:57
z的第一次从1循环到9之后,因为sum3定义在循环外面,sum3的值在下次循环的时候会接着乘,就是会从9!开始, ...

明白了,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马