[STARCRAFT] 소수점 범위에서 오차 생길 만한 부분이 있나요? 5tarbuck5 여러 테스트케이스를 넣어 디버깅 해 봤지만 오답으로 뜹니다. 큰 오차가 생길 만한 부분을 만들었는지.. 고수님들 도움 부탁드려요!! https://algospot.com/judge/problem/read/STARCRAFT 제가 생각한 방법은 대략 이렇습니다. 만약 k = 3이고 q = 100 - p이면, 답: 2C0*p3*q0 + 3C1*p3*q1 + 4C2*p3*q2 #include <stdio.h> #include <math.h> int Cfunc(int a, int b) { if (b == 0 || a == b) return 1; int rslt = 1, i; for (i = 0; i < b; i++) rslt *= a--; for (i = b; i > 0; i--) rslt /= i; return rslt; } int main() { int tc, k, j, rslt; long double p, q, mid, fin, PP; scanf("%d", &tc); while (tc--) { scanf("%lf %d", &p, &k); p *= 0.01; q = 1.0 - p; PP = pow(p, (double)k); mid = 1; fin = 0; for (j = k - 1; j <= (2 * k) - 2; j++) { mid = Cfunc(j, j - k + 1) * PP; if (j - k + 1) mid *= pow(q, (double)(j - k + 1)); fin += mid; } fin *= 100; rslt = (int)floor(fin + 0.5); printf("%d\n", rslt); } return 0; } 9년 전
1개의 댓글이 있습니다. JongMan Cfunc()함수가 큰 n에 대해 잘못된 답을 반환합니다. 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
5tarbuck5
여러 테스트케이스를 넣어 디버깅 해 봤지만 오답으로 뜹니다.
큰 오차가 생길 만한 부분을 만들었는지..
고수님들 도움 부탁드려요!!
https://algospot.com/judge/problem/read/STARCRAFT
제가 생각한 방법은 대략 이렇습니다.
만약 k = 3이고 q = 100 - p이면,
답: 2C0*p3*q0 + 3C1*p3*q1 + 4C2*p3*q2
9년 전