java Collatz猜想:计算有多少个长度为111
所以我的问题是关于collatz猜想。任务是我必须写一个代码来计算每个猜想的步长。例如2 = 2/2 = 1
是一个步骤
现在我需要知道1到10000之间有多少起始数字有111+步。我的密码是54,但我没有任何消息来源,不管是对是错
anzahl
应该是有111个步骤的数字的计数器,laenge
是每个数字的长度:
public class Collertz {
public static void main(String[] args) {
int max = 111;
int anzahl = 0;
int laenge = 0;
for(int i=0; i<=10000;i++) {
for (int j = i; i>1; i++) {
if (j%2 == 0) {
j = j/2;
laenge++;
}
else {
j = 3*j+1;
laenge++;
}
}
if (laenge >= max) {
anzahl++;
}
}
System.out.println(anzahl);
}
}
# 1 楼答案
您的代码有一个坏习惯,就是使用main方法编写所有内容
您至少应该编写一个(纯)函数,为某些参数提供序列长度。然后,一个简单的for循环就足以找出有多少函数值符合您的条件
但是,由于您更喜欢一次性编写所有内容,因此您很快就引入了一个严重错误。想想变量
laenge
给了你什么?它的目的是什么?它是否达到了这一目的,还是应该改为sumOfLengths
# 2 楼答案
以下是我在评论中提到的已解决的问题:
我没有抬头看,衣领状况的规则是什么,听起来很合理。:)
# 3 楼答案
我发现你的代码有两个问题,一个主要问题和一个次要问题。主要问题是在第二个循环的
for
语句中测试并递增i
。你不应该测试j并且不增加任何东西吗?我自己也会使用while
循环。小问题是第一个循环以0而不是1开始。但这不应该影响你的结果