티스토리 뷰
구하는 네제곱수가 a + b + c + d = num(입력값) 이면, a + b + c로 인해 나머지 d를 구할 수 있으므로 3중포문을 사용한다.
식이 복잡해지므로 #deine으로 매크로 상수를 정의했다.
매크로 상수란 소스를 컴파일 하기전 실제값을 치환하는 것이고, 상수에 이름을 붙여서 기억하게 쉽게 만드는 용도이다.
실제로 출력되어야 하는 값은 cnt(가능한 가짓수, 출력값)변수이다. 이 값이 증가되는 경우는 최대 4가지,
M1 == num, M2 == num, M3 == num, M3 + D == num
아래의 코드는 제곱수를 하나씩 찾아가면서 경우의 수를 찾는다.
제곱수를 차례대로 찾아가며, 다른 제곱수가 있는지 다른 포문에서 검사를 계속 해가는 방식이다.
#include< iostream > #include< math.h > #define B (b * b) #define C (c * c) #define D (d * d) #define M1 (a * a) #define M2 ((a * a) + (b * b)) #define M3 ((a * a) + (b * b) + (c * c)) using namespace std; int main() { int num, cnt = 0; int a, b, c; cin >> num; for (a = 1; M1 <= num; a++) { if (M1 == num) cnt++; for (b = a; B <= (num-M1); b++) { if (M2 == num) cnt++; for (c = b; C <= (num-M2); c++) { if (M3 == num) cnt++; else { int d = sqrt(num - M3); if (d >= c) if (M3 + D == num) cnt++; } } } } cout << cnt; }
참고자료
#define에 대해 궁금하다면 http://ccpro.tistory.com/15
댓글