uva题目做题记录
来源:互联网 发布:airbnb淘宝上的优惠券 编辑:程序博客网 时间:2024/05/21 17:35
uva100:3n+1
http://acm.uva.es/p/v1/100.html
一般的思路都是不开数组直接计算,即先设一个最大值max,每次循环时将每个数的步数和max进行比较,如果max小于该数,交换2数,否则继续循环,直至循环结束。此时花费时间较多,每次输入都要重新计算。
若能将每次循环的结果都保存在数组里,则能节省大量时间,故先生成数组。还有,每次输入时,都会有许多重复计算。如输入3和6:
数字
计算次数
3->10->5->16->8->4->2->1
7
4->2->1
2
5->16->8->4->2->1
5
6->3->10->5->16->8->4->2->1
8
我们发现6的计算实际上已包括了3,4,5的计算,即3,4,5重复计算了。如果能将重复计算的时间也省去,则程序效率又能提高。
当然,如果还要优化的话,还是可以优化的,可以将除2运算转为位运算。同时注意到当t为奇数时,乘上3再加1会变成偶数,偶数要除以2,这时可以将2步合成一步,即:t+=(t>>1)+1。
代码如下:
该代码运行时间为0.044s。
本题需要注意的有2点:
(1) 未告诉i和j 的大小,所以输入后要么另设2个新变量,要么输入i和j的值后马上输出。
(2 ) 本题要计算到1000000,当用int型数据时会越界,故用unsigned int 或long int型数据。
- uva题目做题记录
- UVa 200题记录
- UVa 400题记录
- UVa 450题记录
- UVa 500题记录
- UVa 550题记录
- UVa 600题记录
- UVa 650题记录
- UVa 950题记录
- URAL 做题记录
- 做题记录
- leetcode 做题记录
- 做题记录
- 做题记录
- 做题记录
- 每日做题记录
- 做题记录
- 【】做题记录
- Android SDK2.1 新增功能
- epoll用法注意的问题
- 《Java加密与解密的艺术》读后感
- Android SDK2.2 新增功能
- 树上的动态规划;树的最大独立集;刷表DP,子问题彼此独立没有交集; 无根树转化有根树;
- uva题目做题记录
- 用CSV文件批量创建域帐户
- 百度2010暑期实习笔试面试全面备战
- 精妙SQL语句
- Ubuntu设置环境变量错误导致系统无法登录解决方法 [转]
- 素数环(递归)问题
- GridView 元素间距设定
- 控件大小随窗口比例变换
- Dijkstra 单源最短路径算法