zoukankan      html  css  js  c++  java
  • 100 The 3n + 1 problem

    题目大意
    题目原文 http://uva.onlinejudge.org/external/1/100.pdf

    一个数(一百万以内)如果是奇数,乘三加一;如果是偶数,除以二;循环下去,直到等于1为止,这样包括他自己本身出现的数字的个数被称为该数字的“3n+1长度”;题目要求输入两个数,求出这两个数(i和j)之间的最长的“3n+1长度”。

    首先想到i和j有大小的关系,但题目要求输出的顺序不变,所以先输入i和j并立马打印出来,然后再比较i和j的大小并交换。然后根据穷举法,逐个求出i和j之间的数的“3n+1长度”,并设置一个变量来保存它,求出最大值,最后打印出这个最大值。


    附上代码:

    View Code
    附上代码:
    
    #include<stdio.h>
    long f(long a) //该函数返回数a的“3n+1长度”
    {
      long i=1;
      while(a!=1)
      {
       if(a%2) a=3*a+1;
       else a/=2;
       i++;
      }
      return i;
    }
    
    int main()
    {
       long i,j,n,m,x;         //变量为long是因为题目要求i和j在一到一百万之间
       while(scanf("%ld%ld",&i,&j)!=EOF)
       {
        printf("%ld %ld ",i,j);//首先打印出输入的i和j,有空格来应题目格式要求
        n=0;                   //“3n+1长度”一定会大于0,n用于保存当前最大的“3n+1长度”
        if(i>j) {x=i;i=j;j=x;} //比较大小并交换
        for(;i<=j;i++)
        {
          m=f(i);
          if(m>n) n=m;
        }                       
        printf("%ld\n",n);
       }
       return 0;
    }
  • 相关阅读:
    C#:正则表达式
    jsp:
    关于博客的设置
    登录注册案例—MongoDB数据库连接
    cookie封装
    博客样式
    自己的博客
    CentOS7 启动docker.service失败
    合并多个jar包,并通过私服依赖
    springboot+支付宝条码支付开发详解
  • 原文地址:https://www.cnblogs.com/syiml/p/100_.html
Copyright © 2011-2022 走看看