C++ 세그먼트 에러
조회수 1198회
콜라츠의 추측, 3n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다.
1, 어떤 자연수 n이 입력되면,
n이 홀수이면 3n+1을 하고,
n이 짝수이면 n/2를 한다.
이 n이 1이 될때까지 2~3과정을 반복한다.
예를 들어 5는 5 → 16 → 8 → 4 → 2 → 1 이 된다.
여기서 5가 1이되기 위해 6개의 숫자를 나열하게 된다. 이것을 길이라고 하면 5의 길이는 6이된다.
시작수와 마지막 수가 입력되면 그 두 사이게 길이가 가장긴 우박수와 그 길이를 출력하시오.
#include <bits/stdc++.h>
#define FOR(N) for(int i = 0; i < N; i++)
using namespace std;
int cltz[100000001];
int hail (int);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
cltz[1] = 1;
int n = a;
hail(a);
for (int i = a + 1; i <= b; i++)
if (cltz[n] < hail(i))
n = i;
printf("%d %d", n, cltz[n]);
return 0;
}
int hail (int n)
{
if (n > 100000000) {
if (n % 2)
return hail(3 * n + 1) + 1;
else
return hail(n / 2) + 1;
}
if (cltz[n])
return cltz[n];
if (n % 2)
return cltz[n] = hail(3 * n + 1) + 1;
else
return cltz[n] = hail(n / 2) + 1;
}
10만 이상의 값이 들어가면 세그먼트 에러가 뜨는 것 같습니다
Process returned -1073741819 (0xC0000005)
댓글 입력