/*

1293. 3n+1数链问题

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况我们并不知道哪一类问题可以解决,那一类问题不可解决。现在我们就有这样一个问题,问题如下:

  1. 1.       输入一个正整数n;
  2. 2.       把n显示出来;
  3. 3.       如果n=1则结束;
  4. 4.       如果n是奇数则n变为3n+1,否则n变为n/2;
  5. 5.       转入第2步。

例如对于输入的正整数22,应该有如下数列被显示出来:

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

我们推测:对于任意一个正整数,经过以上算法最终会推到1。尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。不过好在我们有计算机,我们验证了对于小于1,000,000的正整数都满足以上推断。

对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16。

你的任务是编写一个程序,对于任意一对正整数ij,给出ij之间的最长链长,当然这个最长链长是由ij之间的其中一个正整数产生的。我们这里的ij之间即包括i也包括j。

Input

输入文件只有一行,即为正整数ijij之间以一个空格隔开。0 < ij < 10,000。

Output

文件只能有一行,即为ij之间的最长链长。

Sample Input

1 10

Sample Output

20

Problem Source

ZSUACM Team Member    */

//前面是题目的原题

/*起初一开始是没有用递归来实现,分析问题觉得比较简单,可以完成,都是后面发现超时非常严重*/

//起初的代码如下

/*

#include<iostream>

using namespace std;

int main(){
 
 int i,j;
 int max = 0;
 cin>>i>>j;
 
 for(int t=i;t<=j;t++){
  int count = 0;
  while(t!=1){
   if(t%2==0){
    t = t/2;
   }
   else{
    t = 3*t +1;
   }
   count ++;
  }
  if(max < count +1) max = count+1;
 }
 
} */

//发现上面的代码超时非常的恐怖,所以觉得递归式最好的办法,由于这个题目的步骤重复比较明显,每一步都是利用

//上一步的,所以递归感觉简单快速

//ac的码如下

#include<iostream>

using namespace std;

int count1(int t,int count){
 if(t==1) return count;
 else{
  if(t%2==0) count1(t/2,count+1);
  else count1(3*t+1,count+1);
 }
}

int main(){
 
 int i,j;
 int max = 0;
 cin>>i>>j;
 
 for(int t=i;t<=j;t++){
  int count = 0;
        count = count1(t,count);
  if(max < count+1) max = count +1;
 }
 cout<<max<<endl;
}

1293. 3n+1数链问题 2016 12 23的更多相关文章

  1. My latest news(--2016.12.31)

    2016.12.31  前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...

  2. mysql查询练习题-2016.12.16

    >>>>>>>>>> 练习时间:2016.12.16 编辑时间:2016-12-20-->22:12:08 题: 涉及:多表查询.ex ...

  3. 更新日志(建议升级到2016.12.17) && 更新程序的方法

    更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  4. 关于2016.12.12——T1的反思:凸包的意义与应用

    2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...

  5. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  6. rhel 7.0 配置centos yum源(2016/12/8),成功!

    1.首先查看redhat 7.0系统本身所安装的那些yum 软件包: rpm -qa | grep yum #列出所有已安装的yum包 2.删除这些包: rpm -e *.rpm --nodeps # ...

  7. Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),

    Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...

  8. IP通信基础课堂笔记----关于数链层

    课前回顾 IOS从上到下分别有:应用层,传输层,网络层,数链层,物理层. IP是网络层的地址,MAC是数链层的地址,IP必须通过ARP才能转换成MAC地址. 课堂内容 1.如何在数链层实现发送端数据无 ...

  9. G - Game HDU - 5242 (数链剖分)

    题目链接: G - Game HDU - 5242 题目大意:首先是T组测试样例,给出一颗以1节点为根的树,每个节点有各自的价值,有m次从根节点出发向下走到叶子节点的机会,每次会得到所有经过节点的权值 ...

随机推荐

  1. ajaxfileupload.js的简单使用

    上传文件 未选择任何文件 引入 <script src="../javaScript/ajaxfileupload.js"></script> <bu ...

  2. Java数组的一些基本算法

    数组的一些算法问题:  排序:(升序)   选择排序:     求每一轮的最小值:再输出   冒泡排序:     相邻的两个数相比较,把两个数相比较,第一个大于好面的就交换位置   shell排序: ...

  3. Sublime Text 3 汉化小技巧

    Sublime Text 3 简体中文汉化包使用方法 1.将下载的sublime_text3汉化包文件解压,得到的Default.sublime-package 文件.打开sublime text 3 ...

  4. unity3d 知识点随记

    1.transform.translate是增加transform面板相应的数值x,y,z是以本地坐标系为方向:transform.transformdirection是以世界坐标系为方向,可以去测试 ...

  5. Android开发环境

    1: JDK 2: Eclipse 3: Android SDK 4: ADT

  6. mysql的约束类型

    1.主键约束 2.非空约束 3.唯一性约束 4.外键约束 5.默认值约束

  7. 快速解析超大XML不占用太大内存

    import xml.etree.ElementTree as ET def parse_res(xml_file): res_dic = {} tmp_lst_lev1 = [] tmp_lst_l ...

  8. 今天研究一下SVN的分支和合并

    关键字: trunk, branch, tag, merge 以前一直以为很难,没敢接触.今天晚上看了一下,也不过如此 用起来还是很简单的

  9. Proxy(代理)-对象结构型模式

    1.意图 为其它对象提供一种代理以控制对这个对象的访问. 2.别名 Surrogate. 3.动机 通过Proxy可以达到对一个对象的访问控制. 4.适用性 远程代理  为一个对象在不同地址空间提供局 ...

  10. iScroll-5 API 中文版

    http://wiki.jikexueyuan.com/project/iscroll-5/ http://www.mamicode.com/info-detail-331827.html IScro ...