当前位置: 代码迷 >> Java相关 >> 你能做的怎么样?试试吧:)
  详细解决方案

你能做的怎么样?试试吧:)

热度:60   发布时间:2007-04-21 21:28:14.0
你能做的怎么样?试试吧:)
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

----------------解决方案--------------------------------------------------------

public class TextTest
{
int len=10000;// 求值范围
int l,m,n;
public TextTest()
{
for(int i=1;i<len;i++)
{
m = i+100;
n = (int)Math.sqrt(m);
if(n*n==m)
{
m = m+168;
l = (int)Math.sqrt(m);
if(l*l==m)
{
System.out.println("结果:"+i);
}
}
m=0;
}

}

public static void main(String args[])
{
TextTest tt = new TextTest();
}



}


//结果为: 21,261,1581
大家动手试试。


----------------解决方案--------------------------------------------------------

/**
* Write a description of class catchyounumber here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class catchyounumber
{
public static void main(String args[])
{
int n=0;
while(n<10000)
{
int l=(int)Math.sqrt(n+100);
if(l*l==n+100)
{
l=(int)Math.sqrt(n+268);
if(l*l==n+268)
System.out.println(n);
}
n++;


}
}
}

----------------解决方案--------------------------------------------------------

互相帮助,交流一下;楼一和楼二思想都是一致的,即都采用了固定范围的遍历,逐一去验证,这也是一种方法,但缺点也是明显的,首先不能保证求得所有解,其次是运行效率低。
这个问题从数学角度再分析一下,发掘数学最基本的东西,才是编程前最应该思考的。
下面我把自己和室友的代码都发上来,大家参考,欢迎交流(我室友就是EastSun,版主)

程序代码:

/**问题分析
*设这个正整数是m
*则有题意知:a*a=m+100 (1)
* b*b=m+268 (2)
*(2)-(1)得:(b-a)*(b+a)=168
*b>=17显然。且(b-a)与(b+a)均同为偶数
*/
public class SolutionTo{
public static void main(String[] args){
int m=2;
while(m<168){
if(168%m==0){
if((168/m)%2==0){
int b=(168/m+m)/2;
if(b<=16) break;
else
System.out.println(\"It's:\"+(b*b-268));
}
}
m=m+2;
}
}
}


室友的
程序代码:

* 由 x +100 =n^2
* x +268 =(n+k)^2
* 得: 168 =k*(2n+k)
* 进一步知: k =2m (k为偶数)
* 从而:
* 42 = m*(n+m)
*其中: m>=1,n>=10
*/
public class SolveNumber{
public static void main(String[] args){
int m =1,n;
while(true){
if(42%m==0){
n =42/m -m;
if(n<10) break;
System.out.println(\"result :\"+(n*n-100));
}
m ++;
}
}
}


----------------解决方案--------------------------------------------------------
  相关解决方案