我试图为UVA在线判断问题100提交解决方案。我在java中编写了代码并且它显示了测试用例的正确结果。但法官的判决结果表明它显示出运行时错误。任何人都可以帮助我为什么会这样?这是我的代码
import java.util.Scanner;
class UVA100 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int a=sc.nextInt();
int b=sc.nextInt();
int start=a<b?a:b;
int end=a*b/start;
int maxcycle=0;
for(int i=start;i<=end;i++)
{
int n=i;
int count=0;
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=3*n+1;
count++;
}
if(count>maxcycle)
maxcycle=count+1;
}
System.out.println(start+" "+end+" "+maxcycle);
}
}
}
以下是Problem
的网址答案 0 :(得分:1)
1)RTE问题
你的n会溢出并变为负面。这本身并没有像某些人所说的那样导致RTE(运行时错误)。然而在下一个循环中,负n现在将收敛为0:
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=3*n+1;
count++;
}
一旦n变为0,它将保持为0,因此无限循环和RTE。
2)TLE问题
一旦解决了这个问题,您将收到TLE(超出时间限制)判定,因为您需要提高算法的速度。目前的问题是你一遍又一遍地重新计算相同的值。您需要使用memoization,请参阅下一个链接:http://en.wikipedia.org/wiki/Memoization