为什么我的UVA在线判断100拼图的java代码在判决中显示运行时错误

时间:2015-04-23 17:46:40

标签: java algorithm

我试图为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

的网址

1 个答案:

答案 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

相关问题