读书人

孙子算经用Java求解?该如何解决

发布时间: 2011-12-31 23:50:30 作者: rapoo

孙子算经用Java求解????
“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以3余2,除以5余3,除以7余2,求这个数.

当然可以用Java编程来实现,得出个23的结果。

这个问题中,我总觉得这是在整数中的最小的一个,也应该还有一大串,于是我就想着用Java编程来把10000以内满足要求的这串数都找出再存在一个数组中,

我写了下面这段代码,

public class JavaCalc{
//static int Result=0;
// boolean flag=true;
public static void main(String [] args){
int Result=0;
int[] rslt=new int[10];
int i=0;
for(Result=1;Result <=10000;Result++){
if ((Result%3==2)&&(Result%5==3)&&(Result%7==2))
//break;
//return Result;}
rslt[i++]=Result;
}
for(int j=0;j <rslt.length;j++){
System.out.println( "the Result[ "+j+ "] we want is: "+rslt[j]);
}
}
}

可是有问题,是个死循环the Result[] we want is: 0

这是怎么回事呢???


[解决办法]
并不是死循环
1000以内一共找到95个(用你的程序,我不知道结果是否正确)
所以是你的数组定义得太小了。

你应该会得到一个OutOfIndexException的
[解决办法]
public static void main(String [] args){
int Result=0;
int[] rslt=new int[10];
int i=0;
for(Result=1;Result <=10000;Result++){
if ((Result%3==2)&&(Result%5==3)&&(Result%7==2)){
if(i <rslt.length){
rslt[i++]=Result;
}
}

}
for(int j=0;j <rslt.length;j++){
System.out.println( "the Result[ "+j+ "] we want is: "+rslt[j]);
}
}

这用个,你那个会数组下标越界
这个结果是
the Result[0] we want is:23
the Result[1] we want is:128
the Result[2] we want is:233
the Result[3] we want is:338
the Result[4] we want is:443
the Result[5] we want is:548
the Result[6] we want is:653
the Result[7] we want is:758
the Result[8] we want is:863
the Result[9] we want is:968

[解决办法]
标记一下
[解决办法]
呵呵,孙子不是让大家死算的.

public static void sunzi(int max){
for(int i=0; i <max; i++){
int data = 105*i+23;
if(data > max){
break;
}
System.out.println( " "+data);
}
}

效率至少相差两个数量级:)
[解决办法]
ls的方法有点痞,就像算fibbonacci不用递归直接把函数写出来,呵呵
------解决方案--------------------


23 是因为除以3,除以7 都余2,而(3×7+2=23) 除以5刚好余3。
连孙子也会投机取巧啊。

读书人网 >J2SE开发

热点推荐