为什么我的Uva的3n + 1解决方案是错误的?

时间:2014-11-02 21:01:46

标签: java

我已经尝试过每次测试并且输出是正确的,但我不明白它为什么显示"错误答案"在我提交给UVA之后。请帮助我找出这段代码的问题。这是我的代码..

import java.util.*;
class Main
{ `
  int counter=0;
  public static void main(String [] args)
  {
    Scanner sc=new Scanner(System.in);
    while(sc.hasNextLine())
    {
      String str=sc.nextLine();
      StringTokenizer st=new  StringTokenizer(str," ");
      String a=(String)st.nextElement();
      String b=(String)st.nextElement();
      long i=Long.parseLong(a,10);
      long j=Long.parseLong(b,10);
      Main mn=new Main();
      long ans;
      if(i>j)
      {
        ans=mn.count(j,i);
      }
      else
      {
        ans=mn.count(i,j);
      }
      System.out.print(i+" "+j+" "+ans);
      System.out.println();
    }
  }

  long count(long m,long n)
  {
    if(m==1 && n==1)
    {
      return 0;
    }
    long input=0;
    long ans=0;
    for(long i=m;i<=n;i++)
    {
      input=i;
      while (true)
      { 
        if(input==1)
        {
          counter++;
          break;
        }
        if(input%2==0)
        {
          input=input/2;                           
          counter++;
        }
        else
        {
          input=input*3+1;
          counter++;
        }
      }
      if(counter>ans)
      {
        ans=counter;
      }
      counter=0;
    }
    return ans;
  }
}

1 个答案:

答案 0 :(得分:0)

您的代码在测试用例1 1上失败。

输出应为1,但程序为0。

修复很简单:

if(m==1 && n==1)
{
  return 1; // instead of 0
}