Programming/codeground

codeground [4] 다트 게임

Moonkwanghyun 2018. 4. 8. 16:32
반응형
SMALL

다트 게임

문제

출처 : codeground.org출처 : codeground.org

입력

출처 : codeground.org출처 : codeground.org

출력

출처 : codeground.org출처 : codeground.org


입출력예

입력출력
1Case#1
10 50 60 80 90134
5
5 5
0 55
45 -50
-77 88
-85 0

이 문제의 경우에 각도에 관해서 미리 알아둬야 할게 있었습니다.

소스.cppgithub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <cmath> //sqrt(), atan2() 함수

struct rect
{
double x;
double y;
};

struct polar
{
double distance;
double angle; //radian
};

//함수 원형
void show_polar(polar dapos);
polar rect_to_polar(rect xypos);

//
int main(void)
{
using namespace std;
rect rplace;
polar pplace;

cout << "x값과 y값을 입력하십시오: ";
while (cin >> rplace.x >> rplace.y) //직각 좌표 정보를 입력 (다른 형값 입력 시 루프 탈출)
{
pplace = rect_to_polar(rplace);
show_polar(pplace);
cout << "x값과 y값을 입력하십시오(끝내려면 q를 입력): ";
}
cout << "프로그램을 종료합니다.\n";
return 0;
}

//극 좌표를 화면에 출력
void show_polar(const polar dapos)
{
using namespace std;
const double Rad_to_deg = 57.2957951; // 180/pi

cout << "거리 = " << dapos.distance;
cout << ", 각도 = " << dapos.angle * Rad_to_deg;
cout << "도\n";
}

//직각 좌표를 극 좌표로 변환
polar rect_to_polar(rect xypos)
{
polar answer;

answer.distance = sqrt(xypos.x * xypos.x + xypos.y * xypos.y); //피타고라스의 정리 이용
answer.angle = atan2(xypos.y, xypos.x); //arctan 이용
return answer;
}


Link: Github


소스.cppgithub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#define _CRT_SECURE_NO_WARNINGS
#define PI 3.14159265358979323846

#include <iostream>
#include <vector>
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;

int Answer;
int Score(const int &x, const int &y)
{
int arr[20] = {9, 13, 4, 18, 1, 20, 5, 12, 9, 14, 11, 8, 16, 7, 19, 3, 17, 2, 15, 10};
return arr[((int)(atan2(y, x) * 180 / PI + 360 + 9) / 18) % 20];
}
int main(int argc, char **argv)
{
int T, test_case;
int num;
int A, B, C, D, E;

setbuf(stdout, NULL);
cin >> T;
for (test_case = 0; test_case < T; test_case++)
{
scanf("%d", &A);
scanf("%d", &B);
scanf("%d", &C);
scanf("%d", &D);
scanf("%d", &E);
scanf("%d", &num);
Answer = 0;

for (int i = 0; i < num; i++)
{
int a, b;
scanf("%d %d", &a, &b);
if (A * A >= a * a + b * b) //BULL
{
Answer += 50;
}
else if (B * B < a * a + b * b && a * a + b * b < C * C) //TRIPLE
{
Answer += Score(a, b) * 3;
}
else if (D * D < a * a + b * b && a * a + b * b < E * E) //DOUBLE
{
Answer += Score(a, b) * 2;
}
else if (a * a + b * b < D * D) //SINGLE
{
Answer += Score(a, b);
}
}

cout << "Case #" << test_case + 1 << endl;
cout << Answer << endl;
}

return 0; //Your program should return 0 on normal termination.
}

Link: Github

반응형
LIST

'Programming > codeground ' 카테고리의 다른 글

codeground [3] 시험 공부  (0) 2018.04.08
codeground [2] 프로그래밍 경진대회  (0) 2018.04.08
codeground [1] 숫자 골라내기  (0) 2018.04.08
cg_intro  (0) 2018.04.08