티스토리 뷰

게임 대진표 에서 보던걸 그대로 문제로 옮긴듯


스타 리그로 예를 들면 이영호와 김택용이 각각 다른조에 있는데 몇번만에 둘이 만나서 대결하느냐를 구하는 시뮬레이션 문제



물론 처음부터 같은 조에 있으면 1을 출력할것이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <memory.h>
using namespace std;
int n;
 
int main()
{
    cin >>n;
    int a,b;
    cin>>a>>b;
    int count=1;
    while((int)((double)a/2+0.5!= (int)((double)b/2+0.5) ) //반으로 나눈걸 반올림한게 같은 경우 대결함.
    {
        a = a%2==0? a/2:a/2+1;
        b = b%2==0? b/2:b/2+1;
        count++;
    }
    cout<<count<<endl;
    return 0;
}
cs

while문 조건은 각각 조를 반으로 나눠서 반올림 한것을 표현한것이다.


c와 c++에서는 반올림을 저런식으로 표현한다고 한다.


1.5~2.0사이의 수에 0.5를 더하게 되면 2.0~2.5가 되는데 여기서 버림( == int로 형변환하는것과 동치)을 해버리면


2가 나온다 즉 1.5~2.0 사이의 숫자를 반올림 한것과 같은 효과


마찬가지로 1.0~1.5미만의 수는 1.5~2.0미만의 수가 될것이고 버림을 할경우 1로 되기때문에 반올림이 된다. 그리고 나서 a 와 b 가 계속 이긴다고 가정했으므로 조 숫자를 반으로 나눠주기만 하면됨


그것만 알면 어렵지 않은 문제

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함