0

C++ を使用して、1 から始まる最初の n 個の数値を取得し、それぞれの「パス カウント」を出力するプログラムを作成していました。コラッツ予想に関するウィキペディアの記事を参照してください)。たとえば、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 になります。 pathCount が 3 の 1 から昇順の番号。私が書いた関数は次のとおりです。

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

ここで、s は入力値、i は毎回 1 ずつ増加する変数です。単純に見えますが、コードは警告なしでコンパイルされますが、計算は行われません。後者の関数を for ループ、無限ループなどとして再フォーマットしようとしましたが、それでもプログラムは無期限にバッファリングするか、偽の値を出力し続けます。非常に明白な何かが欠けているような気がしますか?どんな助けでも感謝します。

4

0 に答える 0