博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯每周一题之1 3n+1问题
阅读量:3807 次
发布时间:2019-05-22

本文共 1304 字,大约阅读时间需要 4 分钟。

每周一题之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); }}

转载地址:http://lhxxn.baihongyu.com/

你可能感兴趣的文章
zookeeper学习
查看>>
数据库连接池(转载)
查看>>
ConfigServer(一)
查看>>
diamond源码学习总结
查看>>
storm的ack机制
查看>>
Storm线程进程分配方法
查看>>
数据一致性-分区可用性-性能——多副本强同步数据库系统实现(转载)
查看>>
hadoop-----joblog读写流程
查看>>
hadoop------applog读写流程
查看>>
job运行流程(2)---ResourceManager调度job
查看>>
MVC 基本知识
查看>>
Sun 官方的 MVC 架构模式蓝图
查看>>
选购家具11个贴心建议
查看>>
Ajax基础知识
查看>>
用Java获取系统时间
查看>>
各种排序算法的分析及java实现
查看>>
wincvs的“License for this product has expired”问题解决
查看>>
CentOS一般用户和root用户之间的切换
查看>>
sublime text3空格和tab的显示
查看>>
shell-----sed命令详解
查看>>