RATIO 오답 케이스 질문 AlKook [[problem:RATIO]] 문제에서 계속 오답이 발생하여 질문 드립니다. 문제에서 주어지는 상수들을 받았을때 다음 승률까지의 연승횟수를 변수로 하는 1차 방정식이 만들어지기에 계산하는 소스를 아래와 같이 작성하였습니다. 어느 부분에서 오답이 나는지 힌트 좀 주세요. #include <iostream> #include <cmath> using namespace std; void solveCase(void) { int total = 0, win = 0, rate = 0; cin >> total >> win; rate = (float) win*100/total; if (rate >= 99) { cout << -1 << endl; return; } int target = rate+1; float answer = 0; answer = (float) ((target*total)-(100*win)) / (100-target); cout << (int) ceil(answer) << endl; return; } int main(void) { ios::sync_with_stdio(false); int cases = 0; cin >> cases; while(cases--) { solveCase(); } return 0; } 10년 전
3개의 댓글이 있습니다. coldradio rate에 처음 값을 넣을 때, float을 truncate해서 넣으셨는데요. 값이 3이 나와야 하지만, float 표현력 한계상, 2.9999999999라고 나올 수도 있어, rate이 정확히 계산 안 될 수 있을 것 같습니다. 그래서 나중에 계산하는 target에도 영향이 있을 듯 하네요. 10년 전 link kcm1700 C/C++에서 float은 10억*100이나 되는 정수를 정확히 표현하지 못합니다. 정밀도를 희생하면서 빠른 계산 속도가 필요한 경우 아니면 double을 쓰시는 게 좋아요. 그리고 이 문제는 굳이 float이나 double이 필요가 없어요. 10년 전 link AlKook 조언 감사합니다. 힌트 주신걸로 수정하여 통과했습니다. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
AlKook
[[problem:RATIO]] 문제에서 계속 오답이 발생하여 질문 드립니다.
문제에서 주어지는 상수들을 받았을때 다음 승률까지의 연승횟수를
변수로 하는 1차 방정식이 만들어지기에 계산하는 소스를 아래와 같이 작성하였습니다.
어느 부분에서 오답이 나는지 힌트 좀 주세요.
10년 전