Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 2, 2017 21:26:23

Arsenii
Зарегистрирован: 2017-08-02
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Всем привет. Проблема с решением задачи: выдает runtime error на 9 тесте, данные теста недоступны. Вот условия:
Даны числа a, b, c, d, e, f. Решите систему линейных уравнений

ax + by = e

cx + dy = f

Формат ввода

Вводятся 6 чисел a, b, c, d, e, f- коэффициенты уравнений.

Формат вывода

Вывод программы зависит от вида решения этой системы.

Если система не имеет решений, то программа должна вывести единственное число 0.

Если система имеет бесконечно много решений, каждое из которых имеет вид y=px+q, то программа должна вывести число 1, а затем значения p и q.

Если система имеет единственное решение (x₀,y₀), то программа должна вывести число 2, а затем значения x₀ и y₀.

Если система имеет бесконечно много решений вида x=x₀, y — любое, то программа должна вывести число 3, а затем значение x₀.

Если система имеет бесконечно много решений вида y=y₀, x — любое, то программа должна вывести число 4, а затем значение y₀.

Если любая пара чисел (x,y) является решением, то программа должна вывести число 5.


Вот мой код:

 a = float(input())
b = float(input())
c = float(input())
d = float(input())
e = float(input())
f = float(input())
if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0:
    print(5)
elif b == 0 and d == 0:
    if a != 0:
        print(3, e / a)
    else:
        print(3, f / c)
elif a == 0 and c == 0:
    if b != 0:
        print(4, e / b)
    else:
        print(4, f / d)
elif a * d == b * c and a * f == c * e:
    if b != 0:
        print(1, -a / b, e / b)
    else:
        print(1, -c / d, f / d)
elif a * d == b * c and a * f != c * e:
    print(0)
else:
    x = (e * d - b * f) / (a * d - b * c)
    y = (a * f - e * c) / (a * d - b * c)
    print(2, x, y)

Офлайн

#2 Авг. 3, 2017 01:46:49

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Не знаю в этом ли причина имеено runtime error, но
предположим, что у вас a,b,c,d = 0, а e,f != 0,
в этом случае у нас нет решений, т.е. по условию задачи мы должны в этом случае вывести 0.

А теперь посмотрим по какой ветке if в этом случае пойдут вычисления по данному коду:

В этом случае условие

 elif b == 0 and d == 0:

удовлетворяется, и ответ программы будет

 print(3, f / c)

что соответствует случаю, когда система имеет много решений. Это уже неверно.
Вот и ZeroDivisionError: division by zero, т.к. с = 0.





Отредактировано scidam (Авг. 3, 2017 02:40:15)

Офлайн

#3 Авг. 3, 2017 09:39:32

Arsenii
Зарегистрирован: 2017-08-02
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Большое спасибо, тест 9 пройден. Теперь застрял на 27 тесте. У меня уже голова не может эффективно придумывать тесты и редактировать код, помогите, если не трудно. Вот исправленный вариант кода:

 a = float(input())
b = float(input())
c = float(input())
d = float(input())
e = float(input())
f = float(input())
if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0:
    print(5)
elif a * d == b * c and a * f != c * e:
    print(0)
elif a == 0 and b == 0 and e != 0:
    print(0)
elif c == 0 and d == 0 and f != 0:
    print(0)
elif a * d == b * c and a * f == c * e:
    if b == 0 and d == 0:
        if a != 0 and c != 0:
            print(3, e / a)
        elif a == 0:
            if e == 0:
                print(3, f / c)
        elif c == 0:
            if f == 0:
                print(3, e / a)
    elif a == 0 and c == 0:
        if b != 0:
            print(4, e / b)
        elif d != 0:
            print(4, f / d)
    elif b != 0:
        print(1, -a / b, e / b)
    elif d != 0:
        print(1, -c / d, f / d)
else:
    x = (e * d - b * f) / (a * d - b * c)
    y = (a * f - e * c) / (a * d - b * c)
    print(2, x, y)

Отредактировано Arsenii (Авг. 3, 2017 16:34:41)

Офлайн

#4 Авг. 3, 2017 18:37:22

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

а так не проще?

 a = float(input())
b = float(input())
c = float(input())
d = float(input())
e = float(input())
f = float(input())
try:
    x = (e * d - b * f) / (a * d - b * c)
    y = (a * f - e * c) / (a * d - b * c)
    print 'x =',x,'y =',y
except Exception as ex:
    print str(ex)
    print 'a =',a,'b =',b,'c =',c,'d =',d,'e =',e,'f =',f

Офлайн

#5 Авг. 3, 2017 19:21:42

Arsenii
Зарегистрирован: 2017-08-02
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Мы так пока не умеем(

Офлайн

#6 Авг. 3, 2017 22:37:11

Arsenii
Зарегистрирован: 2017-08-02
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Разобрался. Если кому интересно, вот код.

 a = float(input())
b = float(input())
c = float(input())
d = float(input())
e = float(input())
f = float(input())
if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0:
    print(5)
elif a * d == b * c and a * f != c * e:
    print(0)
elif a == 0 and b == 0 and e != 0:
    print(0)
elif c == 0 and d == 0 and f != 0:
    print(0)
elif a == 0 and c == 0 and b * f != d * e:
    print(0)
elif b == 0 and d == 0 and a * f != c * e:
    print(0)
elif a * d == b * c and a * f == c * e:
    if b == 0 and d == 0:
        if a != 0 and c != 0:
            print(3, e / a)
        elif a == 0:
            if e == 0:
                print(3, f / c)
        elif c == 0:
            if f == 0:
                print(3, e / a)
    elif a == 0 and c == 0:
        if b != 0:
            print(4, e / b)
        elif d != 0:
            print(4, f / d)
    elif b != 0:
        print(1, -a / b, e / b)
    elif d != 0:
        print(1, -c / d, f / d)
else:
    x = (e * d - b * f) / (a * d - b * c)
    y = (a * f - e * c) / (a * d - b * c)
    print(2, x, y)

Офлайн

#7 Май 4, 2023 11:13:36

Fley
Зарегистрирован: 2023-05-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение системы линейных уравнений

Данная задача есть в тренировках Яндекса по алгоритмам 1.0, решается с помощью метода Крамера чуть короче:

 def solution(a, b, c, d, e, f):
    delta = a * d - b * c
    delta_x = e * d - b * f
    delta_y = a * f - c * e
    if delta == 0:
        if a == b == c == d == e == f == 0:
            return [5]
        elif a == b == 0 and e != 0:
            return [0]
        elif c == d == 0 and f != 0:
            return [0]
        elif delta_x == 0:
            if a == c == 0:
                return 4, f / d if b == 0 else e / b
            elif b == d == 0:
                return (3, f / c if a == 0 else e / a) if delta_y == 0 else [0]
            else:
                return (1, - a / b, e / b) if d == 0 else (1, - c / d, f / d)
        else:
            return [0]
    else:
        return 2, delta_x / delta, delta_y / delta
print(*solution(*[float(input()) for _ in range(6)]))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version