博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[1601]3n+1数链问题 sdutOJ
阅读量:6709 次
发布时间:2019-06-25

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



3n+1数链问题

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

在计算机科学上,有很多类似的问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下:
(1)输入一个正整数n;
(2)把n显示出来;
(3)如果n=1则结束;
(4)如果n是奇数则n变为3*n+1,否则变为n/2;
(5)转入第(2)步。
例如对于输入的正整数22,应该有如下数列被显示出来:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1  
我们推测:对于任意一个正整数,经过以上算法最终会推到1。尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。不过好在我们有计算机,我们验证了对于小于1000000的正整数都满足以上推断。
对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16。
你的任务是编写一个程序,对于任意一对正整数i和j,给出i与j之间的最大链长,当然这个最长链长是由i与j之间的其中一个正整数产生的。我们这里的i和j即包括i也包括j。

输入

输入两个正整数i、j,i和j之间以一个空格隔开。0 < i <= j < 10000。

输出

输出数据只有一行,即为i与j之间的最长链长。

示例输入

1 10

示例输出

20
 
 
#include 
int main(){    int a,b,i,j,t,mnum,num;    scanf("%d %d",&a,&b);    mnum=0;//mnum记录最长的链长    if(a>b)    {        t=a;        a=b;        b=t;    }    for(i=a; i<=b; i++)    {        num=0;        j=i;        while(j!=1)        {            if(j%2!=0)                j=3*j+1;            else                j/=2;            num++;        }        if(num>mnum)            mnum=num;    }    printf("%d\n",mnum+1);    return 0;}

转载于:https://www.cnblogs.com/jiangyongy/p/3971688.html

你可能感兴趣的文章
备战招聘——信息获取与简历制作
查看>>
每天一得,能得就得~~^_^
查看>>
jsp快速学习
查看>>
01Oracle数据库系统环境搭建
查看>>
实时同步方式
查看>>
Android URLConnection发送Get请求 HttpGet封装
查看>>
在页面上实现无缝滚动
查看>>
Windows 编程1
查看>>
sublime Text使用技巧及常用插件
查看>>
Css3 Transition
查看>>
CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
查看>>
c# 使用事务
查看>>
Android使用ListView应该注意的地方
查看>>
2016-11-16试题解题报告
查看>>
bash read命令用法
查看>>
PowerEdgeR710服务器上U盘安装CentOS-5.5
查看>>
第三课:线段
查看>>
Android--多线程之进程与线程
查看>>
04、Unity_声音管理器
查看>>
软件测试接口测试的测试用例类型
查看>>