博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(HDU/UVA)1032/100--The 3n + 1 problem(3n+1问题)
阅读量:4629 次
发布时间:2019-06-09

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

描述

计算机科学中的问题通常被归类为属于某一类问题(例如,NP,不可解,递归)。在这个问题中,您将分析算法的属性,该算法的分类对于所有可能的输入都是未知的。

考虑下面的算法:

    1.输入n

    2.输出n

    3.如果n = 1,则停止

    4.如果n是奇数,则n=3n + 1

    5.否则n=n / 2

    6.返回第2步

给定输入22,将输出以下序列的数字22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

据推测,使用上述算法任何输入值将终止(当输出1时)。尽管算法简单,但是不知道这个猜想是否为真。

然而,已经验证了所有整数n,使得0 <n <1,000,000(并且实际上,比这更多的数目也成立)。

给定输入n,可以确定输出的数字的数量(包括1)。对于给定的n,这被称为n的周期长度。在上面的例子中,22的周期长度为16。

对于任何两个数字i和j,您将确定i和j之间的所有数字的最大循环长度。

输入
输入将由一系列整数对i和j组成,每行一对整数。所有整数将小于1,000,000和大于0。

你应该处理所有的整数对,并且对每个对确定i和j之间的所有整数的最大循环长度。

您可以假设没有操作溢出32位整数。

输出
对于每对输入整数i和j,应输出i,j和i和j之间的整数的最大循环长度。这三个数字应该由至少一个空格分隔,一行上的所有三个数字和每行输入的一行输出。整数i和j必须以与它们在输入中出现的顺序相同的顺序出现在输出中,并且后跟最大循环长度(在同一行上)。

样例输入
1 10
100 200
201 210
900 1000
样例输出
1 10 20
100 200 125
201 210 89
900 1000 174

#include 
#include
using namespace std;int cnt(int n){ int cnt=1; while(n!=1) { if(n%2==0) n=n/2; else n=3*n+1; cnt++; } return cnt;}int main(){ int i,j,t; while(~scanf("%d %d",&i,&j)) { printf("%d %d ",i,j); if(i>j) { int temp; temp=i; i=j; j=temp; } int ans=0; for(t=i;t<=j;t++) { if (cnt(t)>ans) ans=cnt(t); } printf("%d\n",ans); } return 0;}
题目有个坑哦

 

转载于:https://www.cnblogs.com/ACDoge/p/6126822.html

你可能感兴趣的文章
谷歌浏览器的一个新特点—关于获取iframe的parent对象
查看>>
iOS开发Swift篇—(二)变量和常量
查看>>
Windows底层开发前期学习准备工作
查看>>
【C语言及程序设计】项目1-39-3:反序数
查看>>
算法——查找常用字符
查看>>
ANDORID~支持的设备
查看>>
国内外 Java Script 经典封装
查看>>
[vs2005]关于预编绎网站的问题[已预编译此应用程序的错误]
查看>>
find_in_set
查看>>
[HEOI2015]定价
查看>>
题解 洛谷P3203/BZOJ2002【[HNOI2010]弹飞绵羊】
查看>>
机器学习基石的泛化理论及VC维部分整理
查看>>
《php源码学习研究》 第一天
查看>>
C++虚函数和纯虚函数的异同
查看>>
checkbox操作
查看>>
Spring概念
查看>>
VS2017 添加引用报错问题
查看>>
LeetCode 147. Insertion Sort List
查看>>
sqlalchemy增删改查
查看>>
Java校验时间段重叠
查看>>