티스토리 뷰

언타이틀/코드리뷰

코드리뷰 - 라그랑지

알 수 없는 사용자 2016. 4. 13. 23:30

(http://59.23.113.171/30stair/lagrange/lagrange.php?pname=lagrange&stair=4)


구하는 네제곱수가 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 

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