Java (还有一种)UVa 3n+;1帮助问题
我一直在绞尽脑汁想弄明白为什么这是一个“错误的答案”。如果有任何反馈,我将不胜感激 编辑:我重新发布了代码,这个版本最终修复了“运行时错误”,允许数字对之间有多个空格。它现在说的是“错误答案”,但据我所知,我逐字复制了给定的算法,所以我不知所措 谢谢Java (还有一种)UVa 3n+;1帮助问题,java,Java,我一直在绞尽脑汁想弄明白为什么这是一个“错误的答案”。如果有任何反馈,我将不胜感激 编辑:我重新发布了代码,这个版本最终修复了“运行时错误”,允许数字对之间有多个空格。它现在说的是“错误答案”,但据我所知,我逐字复制了给定的算法,所以我不知所措 谢谢 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.io.IOException; 公共班机{ 公共静态void main(字符串[]args){ 主矿井=新主矿井(); 我
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.IOException;
公共班机{
公共静态void main(字符串[]args){
主矿井=新主矿井();
我的;
}
公共空间开始(){
BufferedReader sys=新的BufferedReader(新的InputStreamReader(System.in));
字符串[]对;
试一试{
while((pair=sys.readLine().split(“+”)。长度==2){
System.out.println(对[0]+“”+pair[1]+“”+getMax(整数.parseInt(对[0]),整数.parseInt(对[1]);
}
}捕获(IOEX异常){
返回;
}
}
私有字符串getMax(整数a、整数b){
int maxcount,thiscount,num,n;
对于(maxcount=-1,num=Math.min(a,b);num-maxcount)maxcount=thiscount;
}
返回字符串.valueOf(maxcount);
}
}
当(num您可能需要重新考虑如何解析这些行。我相信代码中唯一可能存在运行时错误的行是整数解析行。您假设每个I
和j
都由一个空格分隔。这个问题没有提及一行上有多少空格。如果您得到了答案,那么如果您的程序在样本上运行,那么问题可能与您使用的是int而不是long这一事实有关
对于3n+1问题,中间值可能会增长到大于int所能处理的值(2147483647),这是判断数据邪恶的常见方式。我认为UVA判断中最重要的事情是:
获得完全相同的输出。末尾没有额外的行
从不抛出异常,只返回或中断,不输出外部边界参数
输出区分大小写
输出参数应保持问题中所示的空格
这里是Stackoverflow的链接:一堵代码墙在这里没有帮助。你能缩小问题的范围吗?它告诉我代码编译并运行良好,但无法解决问题。我真的不知道为什么它会说错误的答案,但那是“Alforthm”位于GETMAX,GETCULL方法中。您是否至少将示例输出与示例输入匹配起来?您需要考虑可能应用于问题并处理它们的任何角落情况。当事情非常复杂时,您无法确定它们,您确实需要测试用例。它为我编译和运行,并给出与示例数据相同的答案。出于某种原因,每当我不将其限制为一个设定值时,它就会给出“运行时错误”。我不知道为什么会发生这种情况,因为我可以继续提供输入,最后以空行结束(如给定的解决方案)它运行得很好。有什么想法吗?他们的示例数据中有一些东西使parseInt()爆炸。可能是一行空格,或者是一行以空格开头。我尝试了很多变化,但仍然得到了错误的答案或运行时错误。您是否尝试过在if(line.length()==0)之前添加line=line.trim();
{return;}
和捕获NumberFormatException?我更新了它以立即获取配对,现在它说“错误答案”。=(至少比运行时错误要好)。我找不到我做错了什么,这让我发疯。谢谢。这似乎解决了运行时错误问题,但现在它说的是“错误答案”有什么想法吗?谢谢你的想法。我试着用long代替int,但结果仍然是我得到了错误的答案。我在网站上找到了一个解决方案(这是第一个问题,应该不难)。看起来这个解决方案只是使用int,并且做了与我的代码相同的事情,但是当我提交他的以确保网站没有被窃听时,它说“接受”。它就在这里
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);
}
}
while(num<4){
...