蓝桥杯每周一题之1 3n+1问题

简介: 蓝桥杯每周一题之1 3n+1问题

每周一题之1 3n+1问题

PC/UVa IDs: 110101/100

Popularity: A

Success rate: low Level: 1

测试地址:

https://vjudge.net/problem/UVA-100

[问题描述]

考虑如下的序列生成算法:从整数 n 开始,如果 n 是偶数,把它除以 2;如果 n 是奇数,把它乘 3 加1。用新得到的值重复上述步骤,直到 n = 1 时停止。例如,n = 22 时该算法生成的序列是:

22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1

人们猜想(没有得到证明)对于任意整数 n,该算法总能终止于 n = 1。这个猜想对于至少 1 000 000内的整数都是正确的。

对于给定的 n,该序列的元素(包括 1)个数被称为 n 的循环节长度。在上述例子中,22 的循环节长度为 16。输入两个数 i 和 j,你的任务是计算 i 到 j(包含 i 和 j)之间的整数中,循环节长度的最大值。

[输入]

输入每行包含两个整数 i 和 j。所有整数大于 0,小于 1 000 000。

[输出]

对于每对整数 i 和 j,按原来的顺序输出 i 和 j,然后输出二者之间的整数中的最大循环节长度。这三个整数应该用单个空格隔开,且在同一行输出。对于读入的每一组数据,在输出中应位于单独的一行。

[样例输入]

1 10

100 200

201 210

900 1000

[样例输出]

1 10 20

100 200 125

201 210 89

900 1000 174

package 蓝桥;
import java.util.Scanner;
public class main {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scanner=new Scanner(System.in);
    long l,r,max=-1;//注意使用long
    l=scanner.nextLong();
    r=scanner.nextLong();
    long j=l,k=r;//备份   l,r;
    while (l<=r) {//遍历,求l到r每个数的循环节长度
      long x=l,temp=0;
      while(true) {
        if (x==1) {
          temp++;//当值变为1时,跳出循环,注意1也包含在循环节中所以temp++
          break;
        }
        else if(x%2==0) {
          x/=2;
        }
        else {
          x*=3;
          x++;
        }
        temp++;
      }
      if (temp>max) {
        max=temp;
      }
      l++;
    }
    System.out.println(j+" "+k+" "+max);
  }
}


相关文章
|
5月前
蓝桥杯动态规划每日一题
蓝桥杯动态规划每日一题
|
6月前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
61 0
力扣 C++|一题多解之动态规划专题(2)
|
6月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
62 0
力扣 C++|一题多解之动态规划专题(1)
|
6月前
|
机器学习/深度学习 算法
蓝桥杯正确的解题姿势
蓝桥杯正确的解题姿势
|
机器学习/深度学习 人工智能 BI
2022蓝桥杯C++B组国赛真题题解(一)
2022蓝桥杯C++B组国赛真题题解
273 0
|
人工智能 算法 Java
2018蓝桥杯C/C++真题题解(二)
2018蓝桥杯C/C++真题题解
|
机器学习/深度学习 人工智能
蓝桥杯带刷,带刷!!!(一)
蓝桥杯带刷,带刷!!!
|
机器学习/深度学习 人工智能