문제 개요
방정식이 주어졌을 때, 프로그램은 a + b ≤ n을 만족하면서 동시에 a + b가 x로 나누어 떨어지는 모든 'a'의 값을 찾아 출력해야 합니다.
예를 들어 b = 10, x = 9, n = 40이라면, a + 10이 40 이하이면서 9의 배수가 되는 경우들을 찾아 해당하는 'a' 값을 구하는 것입니다.
알고리즘
START Step 1 -> 변수 b=10, x=9, n=40과 flag=0, divisible을 선언한다. Step 2 -> 반복문 실행: divisible = (b / x + 1) * x 부터 시작하여 divisible <= n 인 동안 divisible += x 씩 증가시킨다. IF divisible - b >= 1 (divisible - b) 값을 출력한다. flag = 1 로 설정한다. End END STOP
동작 원리
핵심 아이디어는 다음과 같습니다.
- (b / x + 1) * x 는 b보다 큰 x의 배수 중 가장 작은 값을 계산합니다.
- 해당 배수에서 b를 빼면 a + b가 x의 배수가 되는 'a' 값을 얻을 수 있습니다.
- divisible - b ≥ 1 조건을 통해 'a'가 최소 1 이상인 경우만 출력합니다.
예제 코드
#include <stdio.h>
int main(int argc, char const *argv[]) {
int b=10, x=9, n=40, flag = 0;
int divisible;
for (divisible = (b / x + 1 ) * x ; divisible <= n; divisible += x) {
if ( divisible - b >= 1) {
printf("%d ", divisible - b );
flag = 1;
}
}
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
8 17 26
결과 해석
b = 10일 때, a + b가 9의 배수가 되는 값들은 18, 27, 36입니다(40 이하 범위). 따라서 각각에서 b인 10을 빼면 8, 17, 26이라는 'a' 값이 도출됩니다. 이 세 값은 모두 a + b ≤ 40 조건과 나눗셈 조건을 동시에 만족합니다.