“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以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 这是怎么回事呢???
//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的
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
for(int i=0; i<max; i++){
int data = 105*i+23;
if(data > max){
break;
}
System.out.println(""+data);
}
}效率至少相差两个数量级:)
2.分析尾数是3的情况
2.1 因为要符合"三三数之剩二", 所以这个数一定是(n*10+7)*3+2这样的组成(3*7的末尾数是1)
2.2 因为要符合"七七数之剩二", 所以这个数一定是(n*10+3)*7+2这样的组成(7*3的末尾数是1)
2.3 根据2.1和2.2,这个数是n*21+2这种格式,同时,因为末尾数一定要是3,所以得出式子1:
y=21*(10*x+1)+2 {x=0,1,2...}
3.分析尾数是8的情况,比尾数为3的情况复杂一些,过程略,得出式子2:
y=42*(5*x+3)+2 {x=0,1,2...}
4.结合式子1和式子2,得出结论:
y=105*x+23 {x=0,1,2...}