首先就是先把这个题给读懂,否则就不要去敲代码,否则就是浪费时间,
问题描述和分析:该题就是你输入两个数,然后找其中的数,如果%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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复