fork download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class Main {
  5.  
  6.  
  7. public static void main(String[] args) throws Exception{
  8. Scanner in = new Scanner(System.in);
  9. PrintWriter out = new PrintWriter(System.out, true);
  10.  
  11. while(in.hasNextInt()){
  12. int i = in.nextInt();
  13. int j = in.nextInt();
  14.  
  15. int from = Math.min(i, j);
  16. int to = Math.max(i, j);
  17.  
  18. int max = 0;
  19.  
  20. for (int ii = from;ii<=to;ii++){
  21. max = Math.max(max, computeCycleLength(ii));
  22. }
  23.  
  24. out.printf("%d %d %d\n", i, j, max);
  25. }
  26.  
  27. }
  28.  
  29. private static int computeCycleLength(long n) {
  30.  
  31. if (n==1)
  32. return 1;
  33. if (n<_MaxValue && memo[(int)n] != 0)
  34. return memo[(int)n];
  35.  
  36. // computing length of collatz cycle
  37. int len = 1 + computeCycleLength(nextCollatz(n));
  38.  
  39. // storing it in cache
  40. if (n<_MaxValue)
  41. memo[(int)n] = len;
  42. return len;
  43. }
  44.  
  45.  
  46. private static int _MaxValue = 1000000;
  47. public static int[] memo = new int[_MaxValue];
  48.  
  49. public static long nextCollatz(long n){
  50.  
  51. if (n%2==0)
  52. return n/2;
  53. else
  54. return n*3+1;
  55. }
  56.  
  57.  
  58. }
  59.  
Success #stdin #stdout 0.12s 380608KB
stdin
1 10
100 200
201 210
900 1000
stdout
1 10 20
100 200 125
201 210 89
900 1000 174