Farm in C++
문제
- 양이 x마리, 염소가 y마리 있고, 양은 하루에 a만큼의 사료를, 염소는 하루에 b만큼의 사료를 먹을 때, 모든 양과 염소가 하루에 먹은 사료의 양 w와 전체 양과 염소의 수 n을 통해 양과 염소의 수를 구하는 문제이다.
- 유일 해가 존재할 때는 그 해를 출력하며, 해가 2개 이상이거나 해가 없으면 -1을 출력해야한다.
입력 데이터
3 4 9 32
출력 데이터
4 5
조건
- 1 ≤ a ≤ 1,000, 1 ≤ b ≤ 1,000, 2 ≤ n ≤ 1,000, 2 ≤ w ≤ 1,000,000
해결 방법
- 일반적인 연립방정식 문제인 x+y=n, ax+by=w와 같다.
- 따라서 컴퓨터의 계산 능력을 믿고 연립 방정식을 푸는 것을 이용하면 된다.
코드
#include <iostream>
using namespace std;
int main()
{
int sheepNum; // 양의 수
int gottNum; // 염소의 수
int a; // 양 한 마리가 먹는 사료의 양
int b; // 염소 한 마리가 먹는 사료의 양
int n; // 양과 염소의 총 수
int w; // 양과 염소가 하루 동안 소비한 전체 사료의 양
int solutionNum = 0; // 해의 수
cin >> a >> b >> n >> w;
for(int sN=1, gN=n-1; sN<=n-1; sN++, gN--) // sN = loop에서 사용할 양의 수, gN = loop에서 사용할 염소의 수
{ // 양 1마리, 염소 n-1마리 부터 시작
if(solutionNum < 2) // 해가 2개 이상인 경우 구하는 의미가 없기 때문에 loop를 빠져나오기 위함
{
if((sN*a+gN*b) == w) // 양들이 먹은 사료의 양 + 염소들이 먹은 사료의 양 == 하루 동안 소비한 전체 사료의 양
{
sheepNum = sN;
gottNum = gN;
solutionNum++; // 해의 수 증가
}
}
else
{
break;
}
}
if(solutionNum == 1) // 유일해가 존재할 때
{
cout << sheepNum << " " << gottNum << endl;
}
else // 해가 없거나, 2개 이상일 때
{
cout << -1 << endl;
}
return 0;
}
문제 원본 링크
https://www.acmicpc.net/problem/16283