反向Collatz序列代码不计算 使用C++,我编写了一个程序,它将从1开始第一个n个数,并输出它们各自的“路径计数”,这就是我所说的从数字到零的CalATZ序列的迭代次数(参见Caltz猜想)。例如,路径号8是3,因为要达到1需要3个步骤(8:2=4;4:2=2;2:2=1)
因此,我们有一个简单的功能:反向Collatz序列代码不计算 使用C++,我编写了一个程序,它将从1开始第一个n个数,并输出它们各自的“路径计数”,这就是我所说的从数字到零的CalATZ序列的迭代次数(参见Caltz猜想)。例如,路径号8是3,因为要达到1需要3个步骤(8:2=4;4:2=2;2:2=1),c++,collatz,C++,Collatz,因此,我们有一个简单的功能: int pathNumber(int n){ int pathCount = 0; while(n > 1){ if(n % 2 == 0){ n /= 2; }else{ n *= 3; n ++; } pathCount ++; } return pathCount; } 然后我决定写一个
int pathNumber(int n){
int pathCount = 0;
while(n > 1){
if(n % 2 == 0){
n /= 2;
}else{
n *= 3;
n ++;
}
pathCount ++;
}
return pathCount;
}
然后我决定写一个反函数(称为firstInstanceOf(n)),它将从1开始按升序计算任何给定路径号的第一个实例。例如,firstInstanceOf(3)将是8,因为8是从1开始按升序排列的第一个数字,其路径计数为3。我编写的函数如下:
int firstInstanceOf(int s){
int i = 0;
while(pathNumber(i) != s){
i ++;
}
return i;
}
其中s是输入值,i是每次递增1的变量。看起来很简单,代码编译时没有任何警告,但根本不会计算。我曾尝试将后一个函数重新格式化为for循环、infinity循环等,但该程序仍然坚持无限缓冲或输出虚假值。我觉得我错过了一些很明显的东西?感谢您的帮助。那个“路径号”的代码完全被破坏了。它没有考虑到序列的值可能会越来越大并溢出。因此,在非常有趣的情况下,它不会显示正确的结果。实际上,没有必要为此编写代码,因为路径长度为n的最小整数总是2^n。@gnasher729我临时将其从“long”改为“int”,以查看是否是数据类型不兼容导致了问题“实际上没有必要为此编写代码,因为路径长度为n的最小整数总是2^n。”不一定。例如,firstInstanceOf(14)是11,而不是2^14。