【发布时间】:2020-04-11 12:24:20
【问题描述】:
我一直在努力解决这个问题:
下面的迭代序列是为正数的集合定义的 整数:
n → n/2(n 为偶数)
n → 3n + 1(n 为奇数)使用上面的规则并从 13 开始,我们生成以下内容 顺序:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1可以看出这个序列(从13开始到1结束) 包含 10 个术语。虽然还没有被证明(Collatz 问题),认为所有的起始数字都以 1 结束。
100 万以下的哪个起始数字产生最长的链?
注意:一旦链开始,条款就可以超过一个 百万。
我实现了下面的代码,但这似乎没有给我正确的答案。它计算 910107 作为给出最长链的起始数字,但答案应该是 837799。它有什么问题?
#include<stdio.h>
int main(void)
{
int count=1;
int last_count =0;
int num=13;
int temp;
int Largest_Num=0;
for(int i=num;i<1000000;i++)
{
temp = i;
while(temp>1)
{
if(temp % 2 == 0)
{
temp/=2;
}
else
{
temp =(3*temp)+1;
}
count++;
}
if(last_count < count)
{
last_count = count;
Largest_Num = i;
}
count =1;
}
printf("%d\n",last_count);
printf("%d",Largest_Num);
return 0;
}
【问题讨论】:
标签: c algorithm brute-force collatz