POJ_1207
来源:互联网 发布:华腾软件系统 编辑:程序博客网 时间:2024/05/21 16:56
题意:
对于一个数n进行操作:如果n为奇数:n=3n+1;如果n为偶数:n=n/2;
当n=1时停止,由此可以得到n一共变化了多少次(包括初始的n和最后的1,比如题目中的当n=22时,长度是16)。现在给出一个区间[i,j],其中必有一个数按上面方法操作变化的次数最多,求这个数变化多少次(这个次数>=该区间所有数其他数变化的次数)。
思路:定义一个数组sum[],记录每个每个数变化的次数,然后比较得出最大的次数就是结果。不过这种方法太暴力了,虽然在给定的数据范围内也能够瞬秒,但还是可以优化的。注意题目:j的值不一定比i的大
优化思路:
对于n我们可以得到以下结论:
n 为奇数: 3n+1变化次数肯定比n小(如果3n+1在区间内,滤去)
偶数: n/2变化的次数肯定比n小(如果n/2在区间内,滤去)
至于上面的滤去方法,设置一个bool数组就可以了。
以下是代码:
- POJ_1207
- poj_1207
- OOP 思想概述
- linux下u盘使用
- 项目经理不能犯的十大错误!
- 学习linux三月之痒
- PHP框架测试(yii、qee、ThinkPHP、CodeIgniter)
- POJ_1207
- JM8.6 色度帧内预测函数剖析(IntraChromaPrediction8x8)
- java中的键盘事件
- 关于博客中加入html标签并显示效果的实验 暨 开篇
- java字符串学习:String,StringBuilder,StringBuffer的学习
- 错误处理
- _ArrayList_HashSet的比较
- 纯CSS弹出式菜单(兼容IE6)
- 如何实现Windowns释放20%的网速