【发布时间】:2011-04-29 16:44:33
【问题描述】:
Java 源代码:
package n1_problem;
/**
*
* @author nAwS
*/
public class loop {
int loop(long i)
{
long n=i;
int count=1;
while(n>1){
if(n%2==0){
n=n/2;
}
else{
n=3*n+1;
}
count++;
}
return count;
}
int max_cycle(long j,long k){
int max=-1;
for(long i=j;i<=k;i++){
int count=loop(i);
if(count>max){
max=count;
}
}
return max;
}
}
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
loop lp=new loop();
System.out.println("Max Cycle:"+lp.max_cycle(1,1000000));
}
}
C源代码:
int main()
{
long r,h;
int f=0;
do
{
printf("Value,r:");
scanf("%ld",&r);
printf("Value,h:");
scanf("%ld",&h);
f=max_cycle(r,h);
printf("Max:%d\n",f);
}while(getch()!='e');
}
int loop(long i)
{
long n=i;
int count=1;
while(n>1)
{
if(n%2==0){
n=n/2;
}
else{
n=3*n+1;
}
count++;
}
return count;
}
int max_cycle(long j,long k)
{
int max=1;
long i=0;
for(i=j;i<=k;i++){
int count=loop(i);
if(count>max){
max=count;
}
}
return max;
}
对于 3n+1 问题算法,这两个代码之间没有逻辑上的区别。唯一的问题是在 C 中它给出 476 作为最大循环数,而在 java 中它是 525...为什么??
【问题讨论】:
-
我怀疑您的代码通过签名溢出调用了未定义的行为。