2009~2014/C/C++
[C언어 기출문제&풀이] 제출
malu
2010. 11. 4. 21:56
프로그램 명: up_down
제한시간: 1 초
Nikky 와 Byron 체육시간에 게임을 하고 있다.
선생님이 Nikky 에게는 a 보 전진 후에 b 보 후퇴하게 , Byron 에게는 c 보 전진 후 d 보 후퇴하는 작업을 반복적으로 하게 했다.
둘은 같은 보폭을 가지고 한 보폭당 걸리는 시간이 같다.
s 스텝 이후 선생님이 휘슬을 분 경우 둘 중 누가 처음 위치보다 멀리 가 있는가를 알아내는 프로그램을 하라.
입력
5 개의 정수 a,b,c,d,s 가 주어진다.
단, a,b,c,d 는 100 이하의 정수이고 a > b , c > d 이고 s 는 10000 이하의 정수이다.
출력
세 가지 중 하나를 출력한다.
입출력 예
입력
4
2
5
3
12
출력
Byron
입출력 보충
Nikky 는 12 스텝 후의 상태는 4 - 2 + 4 - 2 즉 첫 위치에서 4 스텝 만큼 떨어지고 Byron 는 5 - 3 + 4 즉 6 스텝 떨어져서 Byron 이 더 멀리 떨어져 있다.
출처:uwaterloo junior
풀이 : 소스에다가 이번엔 주석을 다는 새로운 방식으로 해보겠습니다. ㅋ
크흑... 좀 어려웠다.
03 |
int a,b,c,d,s,asicle,bsicle,ad,bd; |
// 변수 설명 : a,b,c,d,s = 입력값 (a,b)sicle =전진 + 후퇴(주기) a(b)d=a가 총 움직인 거리
// 변수설명 이해만 다 되면 돌아가는건 알아서 보면 됩니다.
04 |
scanf ( "%d%d%d%d%d" ,&a,&b,&c,&d,&s); |
07 |
if (s%asicle==0) ad=(a-b)*(s/asicle); |
// sicle과 총 발자국 수가 나누어 떨어질때는간단하게 한 sicle(주기) 에 전진한 거리와 나눈다.
왜? 그게 움직인 거리니까 ~
10 |
if ((s%asicle)<=a) ad=(a-b)*(s/asicle)+(s-asicle); |
11 |
else ad=(a-b)*(s/asicle)+(s-a); |
13 |
if (s%bsicle==0) bd=(c-d)*(s/bsicle); |
16 |
if (s%bsicle<=b) bd=(c-d)*(s/bsicle)+(s-bsicle); |
17 |
else bd=(c-d)*(s/bsicle)+bsicle+(s-c); |
19 |
if (ad>bd) printf ( "Nikky" ); |
20 |
else if (bd>ad) printf ( "Byron" ); |
21 |
else if (bd==ad) printf ( "Tied" ); |