我一直在靠墙试图弄清楚为什么会回来“错误答案”。我非常感谢任何反馈。
编辑:我重新发布了代码,这个版本最终通过在数字对之间允许多个空格来修复“运行时错误”。它现在说“错误的答案”,但据我所知,我逐字复制了给定的算法,所以我很茫然。
感谢。
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);
}
}
答案 0 :(得分:2)
while(num<4){
...
输入是否总是限制为4行?
答案 1 :(得分:0)
您可能想重新考虑如何解析这些行。我相信代码中唯一可能存在运行时错误的行是整数解析的行。您假设每个i
和j
由一个空格分隔。问题没有提到在一条线上会有多少空白。
答案 2 :(得分:0)
如果你得到了错误的答案,并且你的程序在样本上工作,那么问题可能与你使用int而不是longs这一事实有关。
对于3n + 1问题,中间值可以增大到一个int可以处理(2,147,483,647),这是判断数据是邪恶的常用方法。
答案 3 :(得分:0)
我认为UVA判断中最重要的是:
以下是Stackoverflow的链接:https://stackoverflow.com/a/14632770/1060656