0

使用 C++,我正在编写一个程序,该程序将从 1 开始获取前 n 个数字并输出它们各自的“路径计数”,这就是我所说的从数字到零所需的 Collat​​z 序列的迭代次数(请参阅有关 Collat​​z 猜想的Wikipedia 文章)。例如,路径编号 8 为 3,因为到达 1 需要 3 步(8:2 = 4;4:2 = 2;2:2 = 1)。

因此,我们有一个简单的功能:

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)),它将计算任何给定 pathNumber 的第一个实例,从 1 开始按升序排列。例如,firstInstanceOf(3) 将是 8,因为 8 是第一个从1升序排列的数字,其pathCount为3。我写的函数如下:

int firstInstanceOf(int s){
    int i = 0;
    while(pathNumber(i) != s){
        i ++;
    }
    return i;
}

其中 s 是输入值,i 是每次递增 1 的变量。看起来很简单,代码编译时没有任何警告,但根本不会计算。我曾尝试将后一个函数重新格式化为 for 循环、无限循环等,但程序仍然会无限期地缓冲或输出虚假值。我觉得我错过了一些非常明显的东西?任何帮助表示赞赏。

4

0 回答 0