STARCRAFT 문제 질문드립니다. cspark89 #include<iostream> #include<stdio.h> using namespace std; long long factorial(int num) { long long data = 1; for(int i=2;i<=num;i++) { data = data * i; } return data; } long double make_prob(int percent, int win_cnt, int lose_cnt) { long double prob = 1; for(int i=0;i<=win_cnt;i++) { prob *= (double)percent / 100; } for(int i=0;i<lose_cnt;i++) { prob *= ((100 - (double)percent) / 100); } return prob; } int main(void) { int loop = 0; int case_cnt; int percent; int be_win; int win_cnt; int lose_cnt; int round_cnt; long double total_prob = 0; long double this_prob; long long this_case; long double result[1010]; cin >> case_cnt; while(loop < case_cnt) { cin >> percent >> be_win; win_cnt = be_win - 1; for(int i=0;i<be_win-1;i++) { lose_cnt = i + 1; round_cnt = win_cnt + lose_cnt; this_case = factorial(round_cnt) / (factorial(win_cnt) * factorial(lose_cnt)); this_prob = make_prob(percent, win_cnt, lose_cnt); total_prob = total_prob + ((long double)this_case * this_prob); } total_prob = total_prob + make_prob(percent, win_cnt, 0); result[loop] = total_prob; total_prob = 0; loop++; } for(int i=0;i<case_cnt;i++) { printf("%.0lf\n",result[i] * 100); } } 디버그 1 ~ 10까지 다 해본 결과 직접 손으로 푼 것과 정확히 일치하였는데, 답은 자꾸 오답이 나오네요 실수형 계산하고 정수형계산하고 오며가며 하는 과정에서 오답 처리가 되는 것인지 잘 모르겠네요 12년 전
2개의 댓글이 있습니다. kcm1700 printf 포맷이 이상한 것 같네요. long double은 %lf로 출력하는 것이 아니라 %Lf로 출력하셔야 해요. 그리고 테스트케이스 다 저장해뒀다가 한번에 출력할 필요 없어요. 12년 전 link cspark89 감사합니다 덕분에 해결했어요~ 12년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
cspark89
디버그 1 ~ 10까지 다 해본 결과 직접 손으로 푼 것과
정확히 일치하였는데, 답은 자꾸 오답이 나오네요
실수형 계산하고 정수형계산하고 오며가며 하는 과정에서
오답 처리가 되는 것인지 잘 모르겠네요
12년 전