Java 从Uva评委那里得到错误的答案;1问题
我曾多次尝试提交3n+1问题,但未能让Uva评委接受。我用java编写了程序。有人能指出我程序中的错误吗。 问题陈述:- 我的节目:-Java 从Uva评委那里得到错误的答案;1问题,java,Java,我曾多次尝试提交3n+1问题,但未能让Uva评委接受。我用java编写了程序。有人能指出我程序中的错误吗。 问题陈述:- 我的节目:- import java.io.*; import java.util.*; class Main { static String ReadLn (int maxLg) // utility function to read from stdin { byte lin[] = new byte [maxLg]; in
import java.io.*;
import java.util.*;
class Main
{
static String ReadLn (int maxLg) // utility function to read from stdin
{
byte lin[] = new byte [maxLg];
int lg = 0, car = -1;
String line = "";
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[]) // entry point from OS
{
Main myWork = new Main(); // create a dinamic instance
myWork.Begin(); // the true entry point
}
void Begin()
{
String input;
while((input=Main.ReadLn(255))!=null){
StringTokenizer str=new StringTokenizer(input);
int n1=Integer.parseInt(str.nextToken());
int n2=Integer.parseInt(str.nextToken());
int max=0;
for(int i=n1;i<=n2;i++)
{
int no=calculate(i,0);
if(max<no){
max=no;
}
}
System.out.println(n1+" "+n2+" "+max);
}
}
static int calculate(int a,int sum){
if(a==1)
{
return sum+1;
}
else if(a%2==0)
{
sum+=1;
return calculate(a/2,sum);
}
else
{
sum+=1;
return calculate((3*a+1),sum);
}
}
}
import java.io.*;
导入java.util.*;
班长
{
静态字符串ReadLn(int-maxLg)//从stdin读取的实用函数
{
字节lin[]=新字节[maxLg];
int lg=0,car=-1;
字符串行=”;
尝试
{
while(lg 对于(int i=n1;i我认为问题在于输入/输出。您问题中的代码读取一行,然后打印一行。UVa页面上的输入/输出指定使用“系列”作为输入,使用“每个”作为输出。换句话说:读取所有输入行,计算,然后写入所有输出行
下面是一些代码,可以帮助您阅读所有输入行(问题中的ReadLn
方法看起来过于复杂):
public static List readCycleRanges()引发异常{
List cycleRanges=new ArrayList();
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
String line=br.readLine();
而(!(line==null | | line.trim().length()=0)){
StringTokenizer st=新的StringTokenizer(行“”);
int i=整数.valueOf(st.nextToken());
int j=整数.valueOf(st.nextToken());
add(新的int[]{i,j,0});
line=br.readLine();
}
返回循环器;
}
< /代码> 我被UVA法官接受了。这个问题没有考虑到第二个数字可以比第一个数字小。你必须考虑第二个数字是这个系列的开始的情况。你能提供一些样本输入和输出吗?
public static List<int[]> readCycleRanges() throws Exception {
List<int[]> cycleRanges = new ArrayList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
while (!(line == null || line.trim().length() == 0)) {
StringTokenizer st = new StringTokenizer(line, " ");
int i = Integer.valueOf(st.nextToken());
int j = Integer.valueOf(st.nextToken());
cycleRanges.add(new int[] { i, j, 0 });
line = br.readLine();
}
return cycleRanges;
}