わかりました、これは宿題のように聞こえるでしょう。しかし、ここではどうにでもなります。C# を使用してこの問題を解決しようとしています。問題の説明からの抜粋を以下に示します。
入力 n が与えられると、印刷される数字の数 (1 を含む) を決定することができます。与えられた n に対して、これは n のサイクル長と呼ばれます。上記の例では、22 のサイクル長は 16 です。任意の 2 つの数値 i と j について、i と j の間のすべての数値の最大サイクル長を決定する必要があります。
質問
サイクルの長さを除いて、すべてを理解しています。私はそれを正確に理解していません。テキストの定義があいまいであることがわかりました。サイクルの長さは、シーケンス内の数字の数であるため、入力が 10 であると仮定すると、サイクルの長さは 8 になります。しかし、正確にはわかりません。あなたの側でコードは必要ありませんが、私が求めるのはガイダンスだけです。
さらに、標準入力と標準出力から読み取る方法は既に知っています。問題はプログラミング競技形式なので。
入力として n を与える一連の数字を表示する私の実装
static void collatz(ref int n)
{
if (n % 2 == 0)
{
n /= 2;
}
else
{
n = (3 * n) + 1;
}
Console.WriteLine(n);
}
static int GetCycleLength(int n)
{
if (n > 0)
{
int count = 1;
while (n != 1)
{
collatz(ref n);
count++;
}
return count;
}
else
{
return -1;
}
}
ノート
宿題じゃないけど宿題扱いしたいのでタグの一つに入れておきます。