POJ 1207 && HDU 1032 The 3n + 1 problem(水~)
2015-06-21 10:17
197 查看
Description
根据给定的算法,可以计算一个整数的循环数,现在给定一个区间,计算这个区间的所有数的循环数,把最大的循环数输出
1. input n
2. print n
3. if n = 1 then STOP
4. if n is odd then n <– 3n+1
5. else n <– n/2
6. GOTO 2
Input
多组测试用例,每组用例两个数代表查询区间两个端点,以文件尾结束输入,所有数均大于0且小于10000
Output
对于每组用例,输出一行三个整数,前两个为查询区间端点,第三个为该区间最大的循环数
Sample Input
1 10
100 200
201 210
900 1000
Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
Solution
水题,暴力枚举区间每点即可,注意输入的两个点不一定按顺序输入,所以要先排个序
Code
根据给定的算法,可以计算一个整数的循环数,现在给定一个区间,计算这个区间的所有数的循环数,把最大的循环数输出
1. input n
2. print n
3. if n = 1 then STOP
4. if n is odd then n <– 3n+1
5. else n <– n/2
6. GOTO 2
Input
多组测试用例,每组用例两个数代表查询区间两个端点,以文件尾结束输入,所有数均大于0且小于10000
Output
对于每组用例,输出一行三个整数,前两个为查询区间端点,第三个为该区间最大的循环数
Sample Input
1 10
100 200
201 210
900 1000
Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
Solution
水题,暴力枚举区间每点即可,注意输入的两个点不一定按顺序输入,所以要先排个序
Code
#include<stdio.h> #define max(x,y) (x>y?x:y) #define min(x,y) (x<y?x:y) int main() { int s,e,i,j,max,count; while(scanf("%d%d",&s,&e)==2) { max=0; for(i=min(s,e);i<=max(s,e);i++)//区间两端点不一定按顺序输入 { count=1; j=i; while(j!=1) { if(!(j%2)) j/=2; else j=3*j+1; count++;//循环数 } max=max(max,count);//更新值 } printf("%d %d %d\n",s,e,max);//按格式输出 } }
相关文章推荐
- 哈佛商业评论: 从商战到反恐,如何建立指挥系统内外的“网络”
- Git分支操作(Git branch)
- 关于select函数使用的fd_set
- swift protocol mutating
- Android数据库SQLite使用详解二 : 学生管理系统的简单实现
- linq分页扩展
- 读后感
- 重踏学习Java路上_Day06(java 基础下与面向对象,二维数组与面向对象基础)
- Git短命令(alias,别名)
- (第五章)java面向对象之this的作用总结
- PATBasic——1009. 说反话 (20)
- Nginx安装部署
- 社説 20150621 新国立競技場 立ち止まって計画を見直そう
- 社説 20150621 農地集積バンク 利用促進の努力が足りない
- FPGA 处理 视频信号噪声
- 关于ftp中文本模式和二进制模式上传文件的区别
- NSNotificationCenter 的使用详解
- hadoop学习(7)----将Hadoop2.6源码导入到win7下的eclipse
- Andrew NG机器学习课程笔记(十一)
- 【最短路】【水题】【cogs 497】奶牛派对