최종 스코어 맞추기 문제

sonix2772 Reply 9 years 5 weeks ago
#include <stdio.h> int main(){ int num; int score1[100], score2[100]; int sum[100], sub[100]; int i; scanf("%d", &num); for (i = 0; i < num;i++){ scanf("%d %d", &sum[i], &sub[i]); if (sum[i] < sub[i]){ score1[i] = -1; score2[i] = -1; } else if ((sum[i] + sub[i]) % 2 != 0){ score1[i] = -1; score2[i] = -1; } else{ score1[i] = (sum[i] + sub[i]) / 2; score2[i] = (sum[i] - sub[i]) / 2; } } for (i = 0; i < num; i++){ if (score1[i]<0) printf("impossible\n"); else printf("%d %d\n", score1[i], score2[i]); } return 0; } 다음과 같이 구현하여 40 20 과같은 경우는 제대로 나오고 30 40 같은경우는 impossible로 출력을하고 41 38 이런경우도 39.5 1.5 이렇게 나오는데 미식축구 경기 점수가 1점단위기때문에 impossible로 출력을 합니다
booksky Reply 9 years 5 weeks ago
안녕하세요. 조교 이은헌입니다. 작성한 코드의 알고리즘은 문제가 없습니다. 다만 이 문제를 읽어보셨으면 알겠지만 입력값이 100개까지만 들어온다는 말은 없습니다. N의 값은 정해져있지 않은데 이 문제를 풀기 위해 배열을 100개까지만 정의하면 100 이상되는 값이 들어오게 될 경우 문제가 발생하게 되겠지요. 이 문제를 풀기 위해서 배열을 사용할 필요는 없습니다. 값에 대한 정보를 저장하고 프로그램이 종료될 때 한꺼번에 출력하는 것이 아니라 값이 들어왔을 때 즉시 출력하게 작성하시면 됩니다.