若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1098: The 3n + 1 problem

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,245

题目描述

Consider the following algorithm to generate a sequence of numbers. Start with an integer n. If n is even, divide by 2. If n is odd, multiply by 3 and add 1. Repeat this process with the new value of n, terminating when n = 1. For example, the following sequence of numbers will be generated for n = 22:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
It is conjectured (but not yet proven) that this algorithm will terminate at n = 1 for every integer n. Still, the conjecture holds for all integers up to at least 1, 000, 000.

For an input n, the cycle-length of n is the number of numbers generated up to and including the 1. In the example above, the cycle length of 22 is 16. Given any two numbers i and j, you are to determine the maximum cycle length over all numbers between i and j, including both endpoints.

输入

The input will consist of a series of pairs of integers i and j, one pair of integers per line. All integers will be less than 1,000,000 and greater than 0.

输出

For each pair of input integers i and j, output i, j in the same order in which they appeared in the input and then the maximum cycle length for integers between and including i and j. These three numbers should be separated by one space, with all three numbers on one line and with one line of output for each line of input.

样例输入

1 10
100 200
201 210
900 1000

样例输出

1 10 20
100 200 125
201 210 89
900 1000 174

参考代码

#include <stdio.h>
int F(int i);
int main() 
{
    int a,b,i,temp=0,temp1,temp2,a1,a2;
    while(scanf("%d %d",&a,&b)==2) 
    {
        a1=a;
        a2=b;
        if(a>b) 
        {
            temp2=a;
            a=b;
            b=temp2;
        }
        for (i=a;i<=b;i++) 
        {
            temp1=F(i);
            //printf("%dn",temp1);
            if(temp<temp1)
                            temp=temp1;
        }
        printf("%d %d %dn",a1,a2,temp);
        temp=0;
    }
}
int F(int i)
{
    int temp=i,j=1;
    while(1)
    {
        if(temp==1)
            return j;
        if(temp%2==0)
        {
            temp=temp/2;
        }
        else
        {
            temp=temp*3+1;
        }
        j++;
    }
}

解析

暂无

hustoj

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 原站点 Skip
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist