码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 100 The 3*n+1 problem

时间:2016-04-24 14:10:59      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

 

UVA 100 The 3*n+1 problem.

解题思路:对给定的边界m,n(m<n&&0<m,n<1 000 000);求X(m-1<X<n+1)进过操作至1的最大步数。

          对m到n依次计算,比较获得最大步数。

注意:1.输入格式。

        本题利用  while(scanf("%d %d",&m,&n)!=EOF) 

                {

                }

      2.输出与题给出相同。

       3。对当边界为1<n<1 000 000时变量类型的选取。

代码如下:

#include <stdio.h>
#include <stdlib.h>

void FindResult(int Min,int Max)
{
    int i,count,temp;
    temp=0;       //temp存放最大步数
    long long n;  //注意这n类型为long long型,当这为int时,计算837799溢出
    for(i=Min;i<=Max;i++)
    {
        n=i;
        count=0;
        while(1)
        {
            if(n==1)
            {
                count++;
                if(temp<count)
                {
                    temp=count;
                }
                break;
            }
            if(n%2==1)
            {
                n=3*n+1;
                count++;
            }
            else
            {
                n=n/2;
                count++;
            }
        }


    }

    printf("%d\n",temp);
}

int main()
{
    int MaxN,MinN,t;       //MinN下界,MaxN为上界。
    t=0;
    while(scanf("%d %d",&MinN,&MaxN)!=EOF)
    {
        printf("%d %d ",MinN,MaxN);
        if(MinN>MaxN)
        {
            t=MinN;
            MinN=MaxN;
            MaxN=t;

        }
        FindResult(MinN,MaxN);   //计算最大步数



    }
    return 0;
}

以上代码不足之处请指出,谢谢

如果有更好的方法,望不吝赐教,大家相互学习进步。

 

         

 

UVA 100 The 3*n+1 problem

标签:

原文地址:http://www.cnblogs.com/wreck/p/5426851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!