ratio 문제에 관한 질문

  • acecic82
    acecic82

    ratio 문제를 수십번 오답처리를 한 후 도저히 원인을 찾지 못하여 질문합니다. 랜덤을 넣어서 돌려보기도 하고 여러가지 방법을 사용해 보았지만, 어떤 경우 오답을 출력하는지 아직까지 파악을 하지 못하였습니다. 혹시 오답을 출력하는 원인을 알 수 있을까요?

    #include <cstdio>
    #include <math.h>
    #pragma warning(disable : 4996)
    
    int main(){
        int tc;
        scanf("%d", &tc);
        for (int i = 0; i < tc; i++){
            int id;
            int n, m;
            int x;
    
            scanf("%d %d", &n, &m);
            id = m / (float)n * 100 + 1;
    
            if (id < 100){
    
                x = ceil(((float)(id*n - 100 * m)) / (100 - id));
    
                printf("%d\n", x);
    
            }
            else if (m == n)
                printf("-1\n");
            else
                printf("-1\n");
        }
    
        return 0;
    }
    

    8년 전
3개의 댓글이 있습니다.
  • ydk1130
    ydk1130

    제가 돌려볼 상황이 안되고, 문제를 풀어본것도 아니지만 혹시 이런경우의 수도 생각을 해보셨는지 궁금해서 올립니다.

    • 68.9%의 승률인데 68%라고 나온다고 문제에 적혀있는데 0.1%의 승률을 올리기 위해서 68%->69%의 판수를 계산을 하고 있는게 아니신지 궁금합니다^^ 68.9% -> 69% 랑 68% -> 69%는 차이가 크죠! 이런 경우에 대하여 계산이 안되는 것 같아요..

    안풀어보고 돌려보지도 않아서 확실한 답을 말씀드리긴 어려우나 이러한 경우가 계산이 안되고 있는것같아서 올려보았습니다!


    8년 전 link
  • acecic82
    acecic82

    답변 감사합니다 1000 689를 입력하였을때 4가 나오는것으로 보아 올바르게 작동하는것 같습니다 소숫점에서 int로 바뀔때 자동 버림이 되어 68.9일때 68이 입력되도록 코딩하였는데 무엇이 잘못인지 잘 모르겠습니다 가끔 double로 하면 27이 들어와야할 것이 26.99999로 들어가 26으로 인식하는 오류가 발생하는것도 float를 이용하여 수정하였는데... 원인을 잘 모르겠습니다. 관심과 답변 감사합니다.


    8년 전 link
  • wee
    wee

    x 값이 충분히 큰 수이면 int Limit에 걸릴듯 합니다.
    n, m 값도 마찬가지고요


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.