Условие задачи
Решить систему двух линейных уравнений с двумя неизвестными по формулам Крамера. Система уравнений, приведенная во входных данных, имеет вид:
[latex]\begin{cases} 5x_1+8x_2=11 \\ -3x_1+6x_2=15 \end{cases}[/latex]
Входные данные
Первая строка содержит коэффициенты первого уравнения, а вторая строка содержит коэффициенты второго. Все входные числа разделены одним пробелом и не превышают по модулю $100$.
Выходные данные
Первый корень системы уравнений вывести в первой строке, а второй корень во второй строке с точностью до $0.001$.
Тесты
Входные данные | Выходные данные |
[latex]5 \: 8 \: 1 \\ -3 \: 6 \: 15 [/latex] | [latex]-1.000 \\ 2.000 [/latex] |
[latex]5 \: 5 \: 5 \\ 2 \: 3 \: 5 [/latex] | [latex]-2.000 \\ 3.000[/latex] |
[latex]1 \: 2 \: 3 \\ 3 \: 3 \: 3 [/latex] | [latex]-1.000 \\ 2.000 [/latex] |
[latex]25 \: 15 \: 16 \\ 11 \: 12 \: 13 [/latex] | [latex]-0.022 \\ 1.104 [/latex] |
[latex]5 \: 15 \: 5 \\ 7 \: 7 \: 17 [/latex] | [latex]3.143 \\ -0.704 [/latex] |
[latex]10 \: 5 \: 8 \\ 8 \: 5 \: 10 [/latex] | [latex]-1.000 \\ 3.600 [/latex] |
Код программы
Первый способ(многомерным массивом):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; int main() { double matrix[3][2]; for (int i = 0; i < 2; ++i){ for (int j = 0; j < 3; ++j){ cin >> matrix[j][i]; } } double d = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; double d1 = matrix[2][0] * matrix[1][1] - matrix[2][1] * matrix[1][0]; double d2 = matrix[0][0] * matrix[2][1] - matrix[0][1] * matrix[2][0]; printf("%.3lf\n%.3lf\n", d1 / d, d2 / d); return 0; } |
Решение задачи
Создаем матрицу размером [latex]3[/latex] на [latex]2[/latex], так как у нас [latex]3[/latex] переменных в [latex]2[/latex] уравнениях. Создаем циклы для заполнения нашей матрицы. Дальше по формуле Камера перемножаем переменные. Выводим на экран ответы с точностью до $0.001$.
Ссылки
Второй способ(перечисляя переменные):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <math.h> using namespace std; int main() { double a1, b1, c1, a2, b2, c2; cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2; double d = a1*b2-a2*b1; double d1 = c1*b2-c2*b1; double d2 = a1*c2-a2*c1; printf("%.3lf\n%.3lf\n", d1/d, d2/d); return 0; } |
Решение задачи
Суть программы точно такая же, только более понятней запись, а так же работает немного быстрее за счет того, что нет цикла (зависит от компилятора).
Ссылки
- Код решения в Ideone
Зачтено, но оставьте пробелы перед скобками.