孙子算经用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不用递归直接把函数写出来,呵呵
------解决方案--------------------