一生一世陪你


私信TA

用户名:wodeshijie

访问量:23434

签 名:

我要好好地写代码..........

等  级
排  名 428
经  验 4926
参赛次数 1
文章发表 19
年  龄 10
在职情况 学生
学  校 河南农业大学
专  业

  自我简介:

我就是我,可能不是太好,但是我就是我,谁也不能取代........

首先就是先把这个题给读懂,否则就不要去敲代码,否则就是浪费时间,
    问题描述和分析:该题就是你输入两个数,然后找其中的数,如果%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 人评分

  评论区

  • «
  • »