首先就是先把这个题给读懂,否则就不要去敲代码,否则就是浪费时间, 问题描述和分析:该题就是你输入两个数,然后找其中的数,如果%2==0,就/2,否则就是*3+1,一直持续到该数为1结束, 到最后让你求出这个范围内的最大周期数,简单的想一想就是把这个范围的数求出周期数然后用一个数组来进行存储 最后只需要看数组中的最大数就可以了。代码如下: package itcast3; import java.util.Scanner; public class L1095 { static int count; public static void main(String[] args) { Scanner m=new Scanner(System.in); int temp = 0; while(m.hasNext()) { int a=m.nextInt(); int b=m.nextInt(); if(a>b) { int p=a; a=b; b=p; } temp=search(a,b); System.out.println(a+" "+b+" "+temp); } } public static int search(int a, int b) { int i,j; int[] array=new int[b-a+1]; for( i=a,j=0;i<=b&&j<array.length;i++,j++) { count=0; int number=i; if(number==1) count=0; else while(number!=1) { if(number%2==0) { number=number/2; count++; } else { number=number*3+1; count++; } } array[j]= count+1; } int max=array[0]; for(int k=0;k<array.length;k++) if(max<array[k]) max=array[k]; return max; } } 但是这个代码在这个平台上一直是编译不通过的,一直说是数组越界,指针漂移的问题,我也是一连懵,改了几次 还是说数组越界,我最后就不用数组了,直接进行比较,主要思路是设置一个max=0,然后我们肯定要设置一个 方法来求周期数,所以我们可以直接用max与这个方法进行比较,谁大谁就是max,一直循环,直到输入的数的范围 求完了,这种方法也是比较简单的,并且编译很容易就通过了,代码如下: package itcast3; import java.util.Scanner; public class L1095_3 { public static void main(String[] args) { Scanner m=new Scanner(System.in); int a,b; while(m.hasNext()) { a=m.nextInt(); b=m.nextInt(); int x,y; x=a; y=b; if(x>y) { int t=x; x=y; y=t; } int max=0; for(int i=x;i<=y;i++) if(max<search(i)) max=search(i); System.out.println(a+" "+b+" "+max); } } public static int search(int i) { int count=0; if(i==1) count=0; else while(i!=1) { if(i%2==0) { i=i/2; count++; } else { i=i*3+1; count++; } } return count+1; } } 有什么疑问,请在下方评论我会给出解答。
0.0分
0 人评分
字符串的输入输出处理 (C语言代码)浏览:2136 |
你的开发任务 (C++代码)写到一半,等有心情回来补全浏览:923 |
点我有惊喜!你懂得!浏览:2754 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:806 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:768 |
罗列完美数 (C语言代码)浏览:519 |
蛇行矩阵 (C语言代码)浏览:559 |
数组输出 (C语言代码)浏览:749 |
简单的事情 (C语言代码)浏览:679 |