cjynana   9년 전

http://www.acmicpc.net/problem/1002

#include <stdio.h>
#include <math.h>

inline int squa(int a)
{
return a * a;
}

int main(void)
{
int x1, x2, y1, y2, r1, r2;
int distance;

int num[100];
int i, j;

scanf("%d", &i);

for(j=0; j<i; j++)
{
scanf("%d %d %d %d %d %d", &x1, &x2, &r1, &y1, &y2, &r2);

while(1)
{
if(x1 < -10000 || x1 > 10000 || x2 < -10000 || x2 > 10000 || y1 < -10000 || y1 > 10000 || y2 < -10000 || y2 > 10000 || r1 < 0 || r1 > 10000 || r2 < 0 || r2 > 10000)
{
printf("\nPlease check number range!!\n");
scanf("%d %d %d %d %d %d", &x1, &x2, &r1, &y1, &y2, &r2);
}
else
break;
}

distance = squa(x2 - x1) + squa(y2 - y1);

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

if(distance == 0)
{
if(r1 == r2)
num[j] = -1;
else
num[j] = 0;
}
else if(distance == squa(r1 + r2))
num[j] = 1;
else if(distance == squa(r1 - r2))
num[j] = 1;
else if(distance > squa(r1 + r2))
num[j] = 0;
else if(distance < squa(r1 - r2))
num[j] = 0;
else
num[j] = 2;
}

for(j=0; j<i; j++)
printf("%d\n", num[j]);

return 0;
}

어느 부분을 빠트린걸까요 ㅠㅠ

pichulia   9년 전

일단 가장 급한건

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

이거를

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

이렇게 바꾸는 겁니다.

입력받는 변수의 순서가 잘못됐어요ㅋㅋㅋ

yukariko   9년 전

입력받는 밑에 부분은 문제 없어보이네요.

그리고 이렇게 케이스가 담겨진 문제는 배열로 따로 저장해서 한번에 출력하지마시고

그때그때 출력하시는게 좋아요.

괜히 배열선언 하지 않아도 되니까요.

pichulia   9년 전

그리고 사람들이 자주 하는 실수 중 하나..

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

같이, 문제 정답이랑 관련없이

나 혼자 보려고 출력하던 메세지를 안지우고 제출하시면

틀렸다는 메세지를 받게 됩니다.

저같은 경우 이 소스코드에서

x2,y1 순서 바꾸고

printf("distance %d\n", distance); 지우고

정답을 num 배열에 넣고 출력한게 아니라 위에분처럼 그때그때 출력하도록 바꿨더니 맞았습니다.

(셋 중 하나라도 안바꾸면 틀릴테고요...)

즉, 방법 자체는 맞았습니다. 축하드려요(..?!!)

cjynana   9년 전

감사합니다 ㅠㅠ

덕분에 잘 해결했네요

뭐때문에 안됬는지 보니 부끄럽기도 하고 ......

댓글을 작성하려면 로그인해야 합니다.