Задание № 12. Статград 25.10.2022. Решение системой уравнений. Phyton

Вариант 1

Дана программа для редактора:

НАЧАЛО

 ПОКА НЕ нашлось (00)

 заменить (011, 20)

 заменить (022, 10)

 заменить (01, 220)

 заменить (02, 110)

 КОНЕЦ ПОКА

КОНЕЦ 

Известно, что исходная строка A содержала ровно два нуля – на первом и на последнем месте, а также поровну единиц и двоек. После выполнения данной программы получилась строка B, содержащая 40 единиц и больше 50 двоек. Какое наименьшее количество двоек может быть в строке B?

Как работают команды алгоритма для исходных строк:

0110 = 200

0220 = 100

010 = 2200

020 = 1100

 

кол-во цифр “1”

кол-во цифр “2”

Строка 0110 - a

0

1

Строка 0220 - b

1

0

Строка 010 - c

0

2

Строка 0120 - d

2

0

Количество единиц = 0*a + 1*b + 0*c + 2*d = 40

Количество двоек = 1*a + 0*b + 2*c + 0*d > 50

Условие для исходной строки (количество единиц и двоек равно):

2*a + c = 2*b + d


Запустим четыре цикла по переменным a, b, c, d и решим систему уравнений. 

s = []

for a in range(0,50):

  for b in range(0,50):

    for c in range(0,50):

        for d in range(0,50):

          if (a*0 + b*1 + c*0 + d*2 == 40 and

              a*1 + b*0 + c*2 + d*0 > 50 and

               2*a + c == 2*b + d):

            s.append(a*1 + b*0 + c*2 + d*0)

print(s,min(s))

#Ответ: 52

Вариант 2

Известно, что исходная строка A содержала ровно два нуля – на первом и на последнем месте, а также поровну единиц и двоек. После выполнения данной программы получилась строка B, содержащая 47 единиц и меньше 70 двоек. Какое наибольшее количество двоек может быть в строке B?

s = []

for a in range(0,50):

  for b in range(0,50):

    for c in range(0,50):

        for d in range(0,50):

          if (a*0 + b*1 + c*0 + d*2 == 47 and

              a*1 + b*0 + c*2 + d*0 < 70 and

               2*a + c == 2*b + d):

            s.append(a*1 + b*0 + c*2 + d*0)

print(s,max(s))

#Ответ: 68

Комментарии