所以我遇到了分配给我的问题,您编写了一个程序,要求提供起始整数和结束整数,并返回最长的 hailstone sequence 的长度、发生位置的开始位置和结束位置之间的编号以及实际序列。
我已经弄清楚了大部分内容,但我一直坚持打印出实际最大的序列。如果有人能在这方面帮助我,那真的会有帮助。谢谢!
import java.util.Scanner;
public class Hailstone
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int first, last, counter = -500, highestSequence = 0, highestNumber = 0, number = 0, sequence = 0;
System.out.println("First candidate?");
first = scan.nextInt();
System.out.println("Last candidate?");
last = scan.nextInt();
for(int x = first; x <= last; x++)
{
number = x;
counter = 1;
while(number !=1)
{
if(number % 2 == 0) //even
{
number = number/2;
}
else //odd
{
number = number*3 + 1;
}
counter++; //counts sequence
}
if(counter > highestSequence)
{
highestSequence = counter;
highestNumber = x;
sequence = number;
}
}
System.out.println("longest sequence of " + highestSequence + " occurs at " + highestNumber);
}
}
最佳答案
您只需获取您的 highestNumber
并运行计算其序列的代码即可打印它。如果您将代码提取到单独的方法中(只是一个草图,请自行验证并修改),将会有所帮助:
public int checkSequence(int x, boolean print) {
int number = x;
while(number !=1)
{
if (print) {
System.out.print(number + " ");
}
if(number % 2 == 0) //even
{
number = number/2;
}
else //odd
{
number = number*3 + 1;
}
counter++; //counts sequence
}
return counter;
}
在您的程序中,您将调用 checkSequence(x, false)
,完成后您将调用 checkSequence(highestNumber, true)
。
关于java - 冰雹序列 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736087/