algorithm

더블릿|dovelet - 2번째 계단 - 이차방정식/quadratic

블루건 2016. 8. 8. 15:15

문제


프로그램 명: quadratic
제한시간: 1 초

2차 방정식이 a*x^2 + b*x + c = 0 형태로 주어질 때, 실수 범위에서 근의 개수와 근을 출력하는 프로그램을 작성해보자.

입력

3개의 정수 a, b, c 가 빈 칸으로 구분되어 입력으로 주어진다. (-100000 < a, b, c < 100000)

출력

  • 첫 번째 줄에는 근의 개수를 출력한다. (근이 없으면 0, 1개이면 1, 2개이면 2)
  • 두 번째 줄에는 근을 작은 숫자부터 순서대로 빈 칸으로 구분하여 출력한다.
  • 근의 값은 소수점 아래 3자리까지 반올림해서 출력한다.

입출력 예

입력

1 -3 1

출력

2
0.382 2.618
출처: KangJ


풀이


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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    double middle = pow(b, 2- ((double)4 * a*c);
    double result1 = (-+ sqrt(middle)) / (2 * a);
    double result2 = (-- sqrt(middle)) / (2 * a);
    
    if (middle < 0)
    {
        cout << "0";
        return 0;
    }
 
    cout.precision(3);
    cout << fixed;
    if (result1 == result2)
    {
        cout << "1" << endl;
        cout << result1;
    }
    else if (result1 < result2)
    {
        cout << "2" << endl;
        cout << result1 << " " << result2;
    }
    else
    {
        cout << "2" << endl;
        cout << result2 << " " << result1;
    }
 
    return 0;
}
cs