(还有另一个)UVa 3n + 1帮助问题

时间:2010-10-03 04:55:45

标签: java

我一直在靠墙试图弄清楚为什么会回来“错误答案”。我非常感谢任何反馈。

编辑:我重新发布了代码,这个版本最终通过在数字对之间允许多个空格来修复“运行时错误”。它现在说“错误的答案”,但据我所知,我逐字复制了给定的算法,所以我很茫然。

感谢。

The Problem

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;


public class Main {

public static void main(String[] args) {
   Main mine = new Main();
   mine.begin();
}

public void begin(){
    BufferedReader sys = new BufferedReader(new InputStreamReader(System.in));
    String[] pair;
    try{
        while((pair=sys.readLine().split(" +")).length==2){
            System.out.println(pair[0]+ " " +pair[1] + " " + getMax(Integer.parseInt(pair[0]),Integer.parseInt(pair[1])));
        }
    }catch(IOException ex){
        return;
    }
}

private String getMax(int a, int b){
    int maxcount,thiscount, num, n;

    for(maxcount = -1, num =Math.min(a, b); num <= Math.max(a, b); num++ ){
        for(n = num, thiscount = 1; n!=1; thiscount++){
            if(n%2==0)n=n/2;
            else n = 3*n +1;
        }
        if(thiscount>maxcount) maxcount = thiscount;
    }
    return String.valueOf(maxcount);
}
}

4 个答案:

答案 0 :(得分:2)

while(num<4){
...

输入是否总是限制为4行?

答案 1 :(得分:0)

您可能想重新考虑如何解析这些行。我相信代码中唯一可能存在运行时错误的行是整数解析的行。您假设每个ij由一个空格分隔。问题没有提到在一条线上会有多少空白。

答案 2 :(得分:0)

如果你得到了错误的答案,并且你的程序在样本上工作,那么问题可能与你使用int而不是longs这一事实有关。

对于3n + 1问题,中间值可以增大到一个int可以处理(2,147,483,647),这是判断数据是邪恶的常用方法。

答案 3 :(得分:0)

我认为UVA判断中最重要的是:

  1. 获得完全相同的输出。最后没有额外的行。
  2. 永远不会抛出异常只返回或中断外部边界参数没有输出。
  3. 输出区分大小写
  4. 输出参数应保持空格,如问题所示
  5. 以下是Stackoverflow的链接:https://stackoverflow.com/a/14632770/1060656