POJ1207解题报告 Java
来源:互联网 发布:淘宝联盟能使用红包吗 编辑:程序博客网 时间:2024/05/17 06:02
import java.util.Scanner;public class Main {public static int[] data=new int[10001];/** * @param args */public static void main(String[] args){Scanner input=new Scanner(System.in);int i,j; getTable(); //建立查询表int max,big,small;while(input.hasNext()){i=input.nextInt();j=input.nextInt();max=0;if(j<i){big=i;small=j;}else{big=j;small=i;}for(int p=small;p<=big;p++){if(data[p]>max)max=data[p];}System.out.println(i+" "+j+" "+max);}input.close();}/** * 建立查询表,通过下标数字可以直接查询到该数字需要的轮数 */public static void getTable(){for(int p=1;p<=10000;p++){getNum(p);}}/** * 递归算出一个表值 * @param i * @return */public static int getNum(int i){if(i==1)data[i]=1;else if(data[i]!=0)return data[i];else if(i%2==0) data[i]=getNum(i/2)+1;else if(i%2!=0) {if(3*i>=10000)data[i]=getLarge(3*i+1)+1;else data[i]=getNum(3*i+1)+1;}else return 0;return data[i];}/** * 对于大于10000这种出界了的数,只能通过递归而不是查表的方法算 * @param i * @return */public static int getLarge(int i){if(i<=10000){if(data[i]!=0)return data[i];else if(i==1)return 1;else if(i%2==0) return getLarge(i/2)+1;else return getLarge(i*3+1)+1;}else{if(i%2==0) return getLarge(i/2)+1;else return getLarge(i*3+1)+1;}}}
这就貌似是备忘录+递归的方法。
0 0
- POJ1207解题报告 Java
- POJ1207解题报告
- POJ1207解题报告
- POJ1207解题报告----极水的题目
- POJ1118 解题报告JAVA
- HDU_2055解题报告(JAVA)
- POJ1207
- poj1207
- poj1207
- POJ1207
- POJ1207
- poj1207
- poj1207
- poj1207
- poj1207
- poj1207
- poj1207
- Java与C++ 解题报告
- 第2周项目2--程序的多文件组织
- Yii Framework 开发教程(3) 为应用添加日志
- 整理白盒测试中的逻辑覆盖
- linux patch 命令小结
- 开源项目分析之UIL
- POJ1207解题报告 Java
- 别人的App
- 数据验证,数据转换器,国际化
- java完全数
- iOS--触摸事件、手势识别、摇晃事件、耳机线控
- Jerasure库简介及使用范例
- 上传手机图片的问题(2)
- java图片缩放二
- 如何根据mapping.txt还原混淆的代码