, 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