3n+1 问题 java 实现
来源:互联网 发布:软件需求变更申请表 编辑:程序博客网 时间:2024/06/05 14:39
uva number: 100
评判结果:
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. *//** * * @author bluepomelo */import java.io.*;import java.util.*;class Main //ReadLn以及main 函数是从uva online judge 的 submission specification下载的{ static String ReadLn (int maxLg) // utility function to read from stdin { byte lin[] = new byte [maxLg]; int lg = 0, car = -1; String line = ""; try { while (lg < maxLg) { car = System.in.read(); if ((car < 0) || (car == '\n')) break; lin [lg++] += car; } } catch (IOException e) { return (null); } if ((car < 0) && (lg == 0)) return (null); // eof return (new String (lin, 0, lg)); } public static void main (String args[]) // entry point from OS { Main myWork = new Main(); // create a dinamic instance myWork.Begin(); // the true entry point } void Begin() { String input; StringTokenizer idata; int a, b; while ((input = Main.ReadLn (255)) != null) { idata = new StringTokenizer (input); a = Integer.parseInt (idata.nextToken()); b = Integer.parseInt (idata.nextToken()); cycleLength(a,b); } } void cycleLength(int i, int j){ int min,max; if (i < j) { min=i; max=j; } else { min=j; max=i; }//确定输入的两个参数的大小 int maxcycle=-1;//在寻找最大的循环节长度时候使用 int n=max-min+1;//从i到j的有n个整数 int [] cl=new int[n];//cl数组用于存储i到j的n个整数的循环节长度 for(int k=0;k<n;k++){ //计算n个循环节长度 int count=1;//count 表示循环节长度至少为1 int num=k+min;//num 表示一个整数,这个整数从i到j中最小整数开始。 while(num!=1){//如果num不是1,就开始以下计算,如果num是1或者说直到num是1,跳出while循环 if(num%2==0){//如果num是偶数 num=num/2;//num除以2 if(num<k+min && num>min){//这里k+min其实是当前的整数,当前整数一直除以2或者乘以3然后加,变得小于当前的整数,则可以使用之前的整数的循环节长度 count=count+cl[num-min];break;//使用之前计算好的较小的整数的循环节长度 } else{ count=count+1;//如果当前整数一直除以2或者乘以3然后加,变得大于当前的整数,count就要加1表示循环节长度增加一个 } } else if(num%2!=0){//如果num是奇数 num=3*num+1; if( num<k+min && num>min){//这里k+min其实是当前的整数,当前整数一直除以2或者乘以3然后加,变得小于当前的整数,则可以使用之前的整数的循环节长度 count=count+cl[num-min];break;//使用之前计算好的较小的整数的循环节长度 } else{ count=count+1;//如果当前整数一直除以2或者乘以3然后加,变得大于当前的整数,count就要加1表示循环节长度增加一个 } } } cl[k]=count;//保存当前整数的循环节长度 if(count>maxcycle){//得到最大的循环节长度 maxcycle=count; } } System.out.println(i+" "+j+" "+maxcycle);//输出整数i,j以及最大循环节长度} }
阅读全文
0 0
- 3n+1 问题 java 实现
- Java实现-N皇后问题1
- java实现N皇后问题
- N皇后问题,java实现
- Java实现求 1+2+3+.....+n
- n皇后问题java递归实现
- n皇后问题java回溯实现
- java数组实现N皇后问题
- JAVA实现N皇后问题(回溯法)
- java 代码实现 Top N 问题
- java 实现N个女人过桥问题
- java分治算法实现n皇后问题
- Java实现-N皇后问题2
- N皇后问题的Java实现
- N皇后问题可视化实现(java)
- 3n+1问题递归和非递归实现...
- 3n+1问题 用c语言实现
- 3n+1问题
- Cannot remove entries from nonexistent file /usr/local/bin/anaconda2/lib/python2.7/site-packages/eas
- 数据库范式
- Java学习之Iterator(迭代器)的一般用法 (转)
- 使用Mybatis生成工具自动生成实体类和对应的mapper映射文件以及接口文件
- poll函数
- 3n+1 问题 java 实现
- 栈与堆的思考
- php之$_SESSION的理解
- 递归和分治思想及其应用
- hexo搭建博客
- HTTP与HTTPS的Post请求
- rails在控制台、服务器、migrate分别指定启动环境
- 软件工程(C编码实践篇)学习总结
- 给老板减刑系列之hadoop 安全缺陷分析之一:kerberos 的缺陷