Java 为什么UVa在线评委100(3n+;1)的方法A与方法B相比存在缺陷?

Java 为什么UVa在线评委100(3n+;1)的方法A与方法B相比存在缺陷?,java,int,swap,parseint,challenge-response,Java,Int,Swap,Parseint,Challenge Response,简单地从交换方法A更改为交换方法B,UVa法官从“错误答案”变为“接受”。为什么呢?我提前感谢大家的回答 import java.io.IOException; import java.util.StringTokenizer; /** * @author Coder47 * Another solution to 3n+1 (UVa ID: 100) */ class Main { public static int[] cache = new int[1000000];

简单地从交换方法A更改为交换方法B,UVa法官从“错误答案”变为“接受”。为什么呢?我提前感谢大家的回答

import java.io.IOException;
import java.util.StringTokenizer;

/**
 * @author Coder47 
 * Another solution to 3n+1 (UVa ID: 100)
 */
class Main {
    public static int[] cache = new int[1000000];
    static String ReadLn (int maxLg)  // utility function to read from stdin
    {
        byte lin[] = new byte [maxLg];
        int lg = 0, car = -1;

        try
        {
            while (lg < maxLg)
            {
                car = System.in.read();
                if ((car < 0) || (car == '\n')) break;
                lin [lg++] += car;
            }
        }
        catch (IOException e)
        {
            return (null);
        }

        if ((car < 0) && (lg == 0)) return (null);  // eof
        return (new String (lin, 0, lg));
    }

    public static void main(String[] args) {
        Main myWork = new Main();  // create a dynamic instance
        myWork.Begin();            // the true entry point
    }

    void Begin() {
        String input;
        StringTokenizer idata;
        // corresponds to swap method A
        int a, b, temp, cycle, cycleMax;
        // corresponds to swap method B
        // int a, b, min, max, cycle, cycleMax;

        while ((input = Main.ReadLn(255)) != null)
        {
            idata = new StringTokenizer(input);
            a = Integer.parseInt(idata.nextToken());
            b = Integer.parseInt(idata.nextToken());
            // swap method A
            if (b < a) {
                temp = a;
                a = b;
                b = temp;
            }

            // swap method B
            // min = Math.min(a, b);
            // max = Math.max(a, b);
            cycleMax = 0;
            // corresponds to swap method A
            for (int i = a; i <= b; i++)
            // corresponds to swap method B
            // for ( int i = min; i <= max; i++)
            {
                cycle = calculateCycle(i);
                if (cycle > cycleMax) {
                    cycleMax = cycle;
                }
            }
            System.out.println (a + " " + b + " " + cycleMax);
        }
    }

    public int calculateCycle(int n) {
        return calculateCycleHelper(n, 1);
    }

    public int calculateCycleHelper(int n, int cycleNum) {
        if (n == 1) {
            return cycleNum;
        } else {
            return calculateCycleHelper(next(n), cycleNum + 1);
        }
    }

    public int next(int n) {
        if (n % 2 == 0) {
            n = n/2;
        }
        else {
            n = 3*n+1;
        }
        return n;
    }
}
import java.io.IOException;
导入java.util.StringTokenizer;
/**
*@author Coder47
*3n+1的另一种解决方案(UVa ID:100)
*/
班长{
公共静态int[]缓存=新int[1000000];
静态字符串ReadLn(int-maxLg)//从stdin读取的实用函数
{
字节lin[]=新字节[maxLg];
int lg=0,car=-1;
尝试
{
while(lgif(a
表示的与您想要的相反。如果
b
,您需要交换元素,因为在for循环中

for (int i = a; i <= b; i++)
改变了,所以法官不接受它。

这是因为
if(a
所说的与你想要的相反。如果
b
,你需要交换元素,因为在for循环中

for (int i = a; i <= b; i++)

改变了,所以法官不接受它。

这样,就确定了:我是个白痴。非常感谢!@Coder47不,我们都做过这样的事情!别忘了如果答案有用,你可以接受(勾选旁边的勾号)。事实上,不。我收回了。我错误地写出了上面的代码:即使是if(b