我目前解決,Project Euler problem 14:項目歐拉#14
以下迭代序列的組正 整數的定義:
n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 Which starting number, under one million, produces the longest chain?
我設計了以下算法來解決問題:
- 而不是找到系列的ea ch編號,這將包含大量的冗餘計算,我嘗試從1開始向後開發該系列。也就是說,從數字開始並預測它之前的元素。
- 由於可以生成多個系列,因此使用鏈接列表存儲所有系列的最新數量。 (這個想法是隻存儲那些具有更長序列的元素。)
- 我會循環這個,直到找到給定限制下的所有數字;限制下的最後一個數字將具有最長的系列。
這裏是我的代碼:
void series_generate(long num)
{
long n = 1;
addhead(n); //add 1 to list.
while (n < num)
{
series *p;
for (p = head; p != NULL; p = p->next)
{
long bf = p->num - 1;
if (p->num%2 == 0 && bf != 0 && bf%3 == 0) {
bf /= 3;
if (bf != 1)
addhead(bf);
if (bf < num)
n++;
}
p->num *= 2;
if (p->num < num)
n++;
}
}
}
Here is the link to complete code. 不過,我並不如我所料得到答案。 任何人都可以擴展爲什麼這個算法不起作用嗎?
算法返回什麼?它與預期有什麼不同? – gary
您應該使用調試器逐行瀏覽您的程序,以便找到行爲與您的意圖不同的第一行。 –
我用蠻力計算了問題的答案。我期望837799 – mohit