【发布时间】:2010-06-22 15:48:54
【问题描述】:
我正在使用 C 语言处理 Project Euler #14 并已经弄清楚了基本算法;但是,对于大量数据,它的运行速度非常慢,例如2,000,000 通缉;我推测是因为它必须一遍又一遍地生成序列,即使应该有一种方法来存储已知序列(例如,一旦我们达到 16,我们从以前的经验中知道下一个数字是 8、4、2 ,然后是 1)。
我不确定如何使用 C 的固定长度数组来做到这一点,但一定有一个好方法(我敢肯定,这非常有效)。提前致谢。
这是我目前拥有的,如果有帮助的话。
#include <stdio.h>
#define UPTO 2000000
int collatzlen(int n);
int main(){
int i, l=-1, li=-1, c=0;
for(i=1; i<=UPTO; i++){
if( (c=collatzlen(i)) > l) l=c, li=i;
}
printf("Greatest length:\t\t%7d\nGreatest starting point:\t%7d\n", l, li);
return 1;
}
/* n != 0 */
int collatzlen(int n){
int len = 0;
while(n>1) n = (n%2==0 ? n/2 : 3*n+1), len+=1;
return len;
}
【问题讨论】:
-
请尝试从您的特定应用程序中挖掘出您的 C 问题。那么,你更有可能得到答案。