这是这个问题的背景:
背景取任何大于1的整数n并应用以下算法
如果 n 是奇数,则 n = n × 3 + 1 否则 n = n / 2
如果 n 等于 1 则停止,否则转到步骤 1
下面演示了使用 6 的起始 n 时会发生什么
6 - 3 - 10 - 5 - 16 - 8 - 4 - 2 - 1
经过 8 代算法,我们得到了 1。据推测,对于每个大于 1 的数,该算法的重复应用最终会得到 1。
问题是我怎样才能找到一个需要 500 代才能减少到 1 的数字?
下面的代码是我的版本,但似乎有一些错误的逻辑。你能帮我纠正这个吗?提前致谢。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sequence1
{
class Program
{
static void Main(string[] args)
{
int start = 1;
int flag = 0;
int value;
while(true){
int temp = (start - 1) / 3;
string sta = temp.ToString();
if (Int32.TryParse(sta, out value) )
{
if (((start - 1) / 3) % 2 == 1)
{
start = (start - 1) / 3;
flag++;
if (flag == 500)
{
break;
}
}
else
{
start = start * 2;
flag++;
if (flag == 500)
{
break;
}
}
}
else
{
start = start * 2;
flag++;
if (flag == 500)
{
break;
}
}
}
Console.WriteLine("result is {0}", start);
Console.ReadLine();
}
}
}