循环节长度

题目描述

从整数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 ,该序列的元素(包括1)个数被称为 n 的循环节长度,在上述例子中,22 的循环节长度为16 ,输入 i 和 j ,你的任务是计算 i 到 j (包含 i和 j )之间的整数中,循环节长度的最大值

样例输入:
1 10
100 200
201 210
900 1000

样例输出:
1 10 20
100 200 125
201 210 89
900 1000 174

输入:每行包含两个整数 i 和 j

输出:按原来的顺序输出 i 和 j ,然后输出二者之间整数中的最大循环节 长度,在输出中应应于单独的一行;

定义方法判断奇偶数并记录循环节长度

//定义方法
 public static int num(int n){
  //记录生成的循环节长度,本身为1次
  int number=1;
  
  while(n!=1){
   if(n%2==0){//偶数
    n=n/2;
    number++;//循环节长度增加
   }else{//奇数
    n=n*3+1;
    number++;//循环节长度增加
   }
  }
  return number;
 }

对方法进行调用并按格式输入输出

public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  //定义输入数组格式
  int arr[][]=new int [100][2];
  //循环输入
  for(int i=0;sc.hasNext()&&i<100;i++){
   for (int j = 0; j <2; j++) {
    arr[i][j]=sc.nextInt();
   }
   
   int max=0;//存储循环长度最长的
   for (int k = arr[i][0]; k < arr[i][1]; k++) {
    //调用方法计算每一行 i 到 j 之间数字循环接长度最长的
    max=Math.max(max, num(k));
    
   }
   System.out.println(arr[i][0]+" "+arr[i][1]+" "+max);
  }

手算也行其实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值