好的,我知道这听起来像是家庭作业;但无论如何。我正在尝试使用 C#解决这个问题。问题描述的摘录如下所示:
给定输入 n,可以确定打印的数字数量(包括 1)。对于给定的 n,这称为 n 的周期长度。在上面的例子中,22 的循环长度是 16。对于任何两个数字 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;
}
}
笔记
虽然不是作业,但我想把它当作作业,所以我把它作为标签之一。