Collatz问题
来源:互联网 发布:成为算法工程师 编辑:程序博客网 时间:2024/05/17 00:07
Collatz问题
Time Limit: 250ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
一下迭代序列定义在整数集合上:
n = n/2 (n 是偶数)
n = n*3 + 1(n 是奇数)
应用以上规则,并且以数字13开始我们得到一下序列:
13,40,20,10,5,16,8,4,2,1
可以看出这个以13开始以1结束的序列一共经过了9次运算。虽然还没有被证明(Collatz问题),但是人们认为在这个规则下,以任何数字开始都会以1 结束。
以哪个不超过x的正整数开始,能得到运算次数最多的序列?
注意:一旦序列开始,也就是从第二项开始,项是可以超过x的。
输入
输了一个整数n,接下来n行,每行一个整数x (1 <=x<=1,000,000)。
输出
对于每次询问,你需要计算出最多的运算次数是多少。为了节约输出时间,你只需要输出所有询问的答案之和 。
示例输入
3123
示例输出
8
提示
因为测试数据过大,建议使用高效的读入,比如scanf()。
如果你觉得scanf()仍然不够快,可以参考一下读入方式。
#include
template
inline void read(T& x) {
char ch; while (!((((ch=getchar())>='0') && (ch <= '9')) || (ch == '-')));
x = ch-'0'; while (((ch=getchar())>='0') && (ch <= '9')) x = x*10+ch-'0';
}
int main()
{
int a,b;
read(a);//等价于scanf(“%d”,&a);
read(b);//等价于scanf(“%d”,&b);
}
来源
示例程序
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define LL long long using namespace std; LL dp[1000100],a[1000100]; LL DFS(LL i) { if(i==1) { return 0; } if(i<1000000) { if(a[i]) return a[i]; } if((i%2)==1) return DFS(i*3+1)+1; if((i%2)==0) return DFS(i/2)+1; } int main() { int i,n,x; LL m=0; for(i=1;i<=1000000;i++) { a[i]=DFS(i); if(m<a[i]) m=a[i]; dp[i] = m; } scanf("%d",&n); LL ans=0; while(n--) { scanf("%d",&x); ans += dp[x]; } printf("%lld\n",ans); return 0; }
0 0
- Collatz问题
- python程序-->Collatz 序列问题
- collatz序列
- The Collatz Sequence
- uva694 The Collatz Sequence
- ACdreamOJ 1135 Collatz
- 694 - The Collatz Sequence
- XTU 1142 Collatz Conjecture
- 694 - The Collatz Sequence
- 694 - The Collatz Sequence
- 694 - The Collatz Sequence
- 694 - The Collatz Sequence
- 694 - The Collatz Sequence
- UVa694 The Collatz Sequence
- The Collatz Sequence
- The Collatz Sequence
- The Collatz Sequence
- The Collatz Sequence
- android studio 获取 应用签名(SHA1 MD5 )方法
- 你不得不读的书籍清单
- 最长01串
- spark源码编译
- matlab卷积相关
- Collatz问题
- UVA1595-对称轴
- 学习笔记(5)——文件压缩
- HLG 哈理工OJ 2074逃生
- Python 标准库 —— os 模块
- NOIP2015提高组Day2 子串
- UVA230-图书馆管理
- log4j配置说明
- c++操作符优先级表格 + 记忆方法整理