아핫뉴스실시간 인기검색어
아핫뉴스 화산 이미지
아하

생활

생활꿀팁

당당한산양248
당당한산양248

백준 1004번 런타임 에러가 나는데 이유를 모르겠습니다.

//횟수가 증가하는 경우는 출발점과 행성계의 좌표가 같은 경우 혹은 도착점과 행성계의 좌표가 같은 경우, 점과 점 사이의 거리가 행성의 반지름보다 작은 경우

#include <stdio.h>

#include <math.h>

typedef struct _Position {

int cx, cy, r;

}_pos;


int main(void) {

int t;

int x1, y1, x2, y2;

scanf("%d", &t);

for (int i = 0; i < t; i++)

{

int k = 0,u;

scanf("%d %d %d %d", &x1, &y1, &x2, &y2);

scanf("%d", &u);

for (int m = 0; m < u; m++) {

_pos pos[40];

scanf("%d %d %d",&pos[m].cx, &pos[m].cy, &pos[m].r);

if (((x1 == pos[m].cx) && (y1 == pos[m].cy)) || ((x2 == pos[m].cx) && (y2 == pos[m].cy)))

// 행성의 중점과 출발점이 같을 경우 혹은 행성의 중점과 도착점이 같을 경우

k++; //횟수 증가

else if ((pos[m].rpos[m].r) > ((pos[m].cx - x1)(pos[m].cx - x1) + (pos[m].cy - y1)*(pos[m].cy - y1)))

// 원 안에 한 점이 있는 케이스 1

k++;

else if ((pos[m].rpos[m].r) > ((pos[m].cx - x2)(pos[m].cx - x2) + (pos[m].cy - y2)*(pos[m].cy - y2)))

// 원 안에 한 점이 있는 케이스 2

k++;

else if (((pos[m].rpos[m].r) > ((pos[m].cx - x1)(pos[m].cx - x1) + (pos[m].cy - y1)*(pos[m].cy - y1)))

&& ((pos[m].rpos[m].r) > ((pos[m].cx - x2)(pos[m].cx - x2) + (pos[m].cy - y2)*(pos[m].cy - y2))))

// 원 안에 두 점이 있는 경우

k=0;

}

printf("%d\n", k);

}

}


출력은 정상적으로 됩니다 ㅠㅠ

    55글자 더 채워주세요.
    1개의 답변이 있어요!
    • 유망한치와와177
      유망한치와와177

      문제의 조건을 보면,

      첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다.

      두 번째 줄에는 행성계의 개수 n이 주어지며,

      세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다.

      입력제한은 다음과 같다. (-1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000, 1 ≤ r ≤ 1000, 1 ≤ n ≤ 50)

      작성하신 코드에서 u의 값이 1 ~ 50의 값을 가지는데, pos는 40으로 강제로 할당되어 있어서 pos[m] 접근중 런타임 에러 발생하는 것으로 보입니다.

      아래 문제가 되는 코드입니다.

      for (int m = 0; m < u; m++) {

      _pos pos[40];

    PC용 아하 앱 설치 권유 팝업 이미지장도연이 추천하는 아하! 앱으로 편리하게 사용해 보세요.
    starbucks
    앱 설치하고 미션 완료하면 커피 기프티콘을 드려요!