DY N DY

문제은행 강아지와 병아리(C++) 본문

PARK/ALGORITHM

문제은행 강아지와 병아리(C++)

손세지 2016. 4. 13. 14:18

1001 : 강아지와 병아리

제한시간: 1Sec    메모리제한: 32mb
해결횟수: 1117회    시도횟수: 4383회   



강아지와 병아리의 합과 다리의 수를 입력받아 강아지와 병아리가 각각 몇 마리씩인지 구하는 프로그램을 작성하시오.

 

강아지와 병아리의 합 1000 이하 다리의 합 4000 이하의 정수를 공백으로 구분하여 입력받는다.

하나의 결과가 나온 후에도 계속 새로운 입력을 받다가 0 이 입력되면 프로그램을 종료한다.



강아지와 병아리가 각각 몇 마리씩인지 공백으로 구분하여 출력한다.

주어진 데이터로 마리수를 정할 수 없을 때는 "0" 을 출력한다.

데이터의 크기가 주어진 범위를 벗어날 경우는 "INPUT ERROR!"를 출력한다.


 [Copy]
25 80
15 10
1500 20000
0 0
 [Copy]
15 10
0
INPUT ERROR!
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
/**************************************************************
    Problem: 1001
    User: a132034
    Language: C++
    Result: Success
    Time:0 ms
    Memory:1740 kb
****************************************************************/
 
 
#include    <iostream>
using namespace std;
 
int main()
{
    int a, b;
    int x, y;
     
    while (1)
    {
        cin >> a >> b;
        if (a == 0 && b == 0)
            return 0;
 
        if (a > 1000 || b > 4000  || a < 0 || b < 0)
        {
            cout << "INPUT ERROR!" << endl;
            continue;
        }
 
        x = (b - 2 * a) / 2;
        y = a - x;
 
        if (x <= 0 || y <= 0 || 4*x+2*y != b)
            cout << 0 << endl;
        else
            cout << x << " " << y << endl;
    }
 
    return 0;
}

강아지를 x 병아리를 y로 생각했을 떄 

강아지 수 + 병아리 수 = x + y = a

강아지 다리 수 + 병아리 다리 수 = 4x + 2y = b 

식을 풀어보면  

  4x + 2y = b 

- 2x + 2y = 2a 

 2x = b - 2a -> x = (b - 2a)/2 

y = a - x 

만약 x나 y가 0보다 작거나 이렇게 구한 x,y를 다른 식에 대입했을 때 다른 값이 나온다면 정할 수 없으므로 0 출력