Тема 6. Алгоритмы – определение результата
6.02 Анализ простейших программ (старое)
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – определение результата
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#5950

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 4; 2; 1; 3; 4; 5; 6; 7; 8; 3 соответственно, т.е. A[0] = 4; A[1] = 2 и т.д. Определите значение переменной c  после выполнения следующего фрагмента программы, записанного ниже на разных языках программирования.

|--------------------------|----------------------|-----------------------|
|C++-----------------------|Python----------------|Pascal-----------------|
|c = 0;                    |c = 0                 |c :=  0;                |
|for (i = 1; i < 10; i + + ) {|for i in range (1,10 ):|for i = 1 to 9 do     |
|  if (A [i] == A [0]) {     |   if A[i] == A [0] :  |  if A [i] = A [0 ] then|
|                          |                      |                       |
|    c + +;                |     c = c + 1        |     begin              |
|    t = A [i + 1];         |     t = A[i + 1]     |       c := c + 1;     |
|    A [i + 1] = A[i];      |     A [i + 1] = A [i] |       t := A [i + 1]; |
|    A [i] = t;}            |     A [i] = t         |       A[i + 1] := A [i];
|  }                       |                      |       A[i] := t;      |
|                          |                      |                       |
--------------------------------------------------------end;---------------
Показать ответ и решение

Решение аналитически

Цикл проверяет каждый элемент массива на совпадение с A[0], затем этот элемент, который совпал, меняется местами со следующим. Значит, условие совпадения будет выполняться до конца цикла. Условие сопадения первый раз выполнится и будет выполняться до конца при i = 4  , значит, значение c = 6  .

Решение программой

c = 0
a = [4, 2, 1, 3, 4, 5, 6, 7, 8, 3]
for i in range(1, 10):
    if a[i] == a[0]:
        c += 1
        # Чтобы не вышло за границы списка
        if i == len(a) - 1:
            break
        t = a[i + 1]
        a[i + 1] = a[i]
        a[i] = t
print(c)

Ответ: 6

Ошибка.
Попробуйте повторить позже

Задача 2#5949

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 4; 5; 1; 6; 3; -1; 0; -2; 7; 2 соответственно, т.е. A[0] = 4; A[1] = 5 и т.д. Определите значение переменной c после выполнения следующего фрагмента программы, записанного ниже на разных языках программирования.

|--------------------------|--------------------|---------------------|
|C++-----------------------|-Python-------------|Pascal---------------|
|c = 0;                    | c = 0              |c :=  0;              |
|for(i = 0; i < 10; i + + ) { for i in range (10 ):|for i = 0 to 9 do    |
|  if (A [i] < A [0]) {      |   if A [i] < A[0] :  |  if A [i] < A [0 ] then
|                          |                    |                     |
|    c + +;                |     c = c + 1      |     begin            |
|    t = A [i];             |     t = A[i]       |       c := c + 1;   |
|    A [i] = A [0];          |     A [i] = A[0]    |       t := A [i];    |
|    A [0] = t;}           |     A [0] = t       |       A[i] := A [0]; |
|  }                       |                    |       A[0] := t;    |
|                          |                    |                     |
------------------------------------------------------end;-------------
Показать ответ и решение

Решение аналитически

Цикл сравнивает каждый элемент массива, начиная с A[1]. Если A[i] меньше, чем A[0], то A[0] заменяется на A[i], A[i] заменяется A[0], а значение переменной c  увеличивается на 1. Пошагово распишем работу программы: 5 > 4  , значит, не увеличиваем   и не меняем элементы местами: A  = {4;5;1;6; 3;− 1; 0;− 2; 7;2} ; c = 0

1 < 4  , значит, увеличиваем   и меняем элементы местами: A  = {1;5;4; 6;3;− 1;0;− 2;7;2} ; c = 1

6 > 1  , значит, не увеличиваем   и не меняем элементы местами: A =  {1;5;4;6;3;− 1;0;− 2;7;2 } ; c = 1

Следующий элемент, меньше A[0] — A[6]. Значит, когда цикл проверит элемент A[6], значение c  увеличится и элементы поменяются местами: A  = {− 1;5;4;6;3;1; 0;− 2; 7;2} ; c = 2  .

Дальше проверяем A[8], т.к. (− 2) < (− 1)  : A  = {− 2;5;4;6; 3;1;0;− 1;7;2} ; c = 3  .

Заметим, что дальше нет элементов меньших, чем A[0], значит, c = 3  .

Решение программой

c = 0
a = [4, 5, 1, 6, 3, -1, 0, -2, 7, 2]
for i in range(10):
    if a[i] < a[0]:
        c += 1
        t = a[i]
        a[i] = a[0]
        a[0] = t
print(c)

Ответ: 3

Ошибка.
Попробуйте повторить позже

Задача 3#5904

Ниже на двух языках программирования записан алгоритм. Получив на вход натуральное десятичное число x  , этот алгоритм печатает два числа: L  и M  . Укажите наибольшее число x  , при вводе которого алгоритм печатает сначала 24, а потом 4.

|------------------|----------------------------------------|
|Python------------|C++-------------------------------------|
|x =  int (input ()) |#include  < iostream >                  |
|L  = 1            |usingnamespacestd;                      |
|M  =  0           |intmain (){                             |
|whilex  > 0 :     |  intx,L, M ;                           |
|                  |                                        |
|   M + =  1       |  cin >>  x;                            |
|   if x%2  ==  0 : |  L =  1;                               |
|     L∗ =  (x%7  ) |  M  = 0;                               |
|   x∕∕ = 7        |  while(x >  0){                        |
|print (L )         |    M  + = 1;                           |
|                  |                                        |
|print (M  )        |    if(x%2  ==  0)                      |
|                  |      L ∗ = (x%7 );                     |
|                  |    x ∕ = 7;                            |
|                  |  }                                     |
|                  |                                        |
|                  |  cout < < L < < endl < < M  < < endl;  |
|                  |  return0;                              |
--------------------}---------------------------------------|
Показать ответ и решение

Посмотрим, за что отвечает каждое число. В программе мы делим число x  на 7 до тех пор, пока оно не становится неположительным. С числом x  мы проводим две операции: делим на 7 и берем остаток от деления на 7, значит, делением на 7 мы переводим x  в семеричную систему счисления.

Мы увеличиваем M  на единицу при каждом делении, значит, M  — это количество разрядов, искомое число четырехзначное.

Если последняя цифра числа в семеричной системе четная, мы умножаем на нее число L  . Значит, L  — это произведение всех четных цифр, составляющих наше число.

Нам нужно указать наибольшее x  . Значит, нам нужно, чтобы старший разряд был максимально большим — иначе число будет меньше, чем могло бы быть. Начнем подбирать его. Вспомним, что мы в семеричной системе счисления. Значит, максимальная цифра — 6. Может ли на первом месте числа стоять 6? Да, может, она четная (помним, что умножаем на L  только четные цифры). Осталось три разряда.

Мы все еще хотим, чтобы наше число было максимальным. Может ли на следующем месте стоять 6 для этого? Нет, т.к. тогда мы не получим нужного L  . Может ли быть 5? Да, ведь нечетные цифры не влияют на L  . Отлично, значит, у нас есть число вида 65**.

Продолжим. Можем ли мы поставить 6 на следующее место? По той же причине — нет. А 5? Можем. Тогда на следующей позиции должна стоять 4 — и L  будет 24.

Получили 6554. А теперь вспомним, что это число в семеричной системе. Переведем в десятичную: 65547 =  4 ⋅ 70 + 5 ⋅ 71 + 5 ⋅ 72 + 6 ⋅ 73 = 234210   .

Ответ: 2342

Ошибка.
Попробуйте повторить позже

Задача 4#5871

Определите, что будет напечатано в результате работы следующего фрагмента программы:

|-----------------------|-------------|-------------------------|
|C++                    |Python       |Pascal                   |
|#include--<iostream->--|s =-0--------|var-k,s:-integer;---------|
|                       |             |                         |
|using namespace  std;  |k = 0        |begin                    |
|int main() {           |while k < 15 |  s := 0;                |
|int s, k;              |  k = k + 3  |  k := 0;                |
|s = 0;k =  0;          |  s = s + k  |  while k < 15 do  begin |
|while (k < 15) {       |print(s)      |     k := k + 3;         |
|                       |             |                         |
|k = k + 3;             |             |     s := s + k;         |
|s = s + k;             |             |  end;                   |
|}                      |             |  write(s);              |
|cout < < s < < endl;   |             |end.                     |
|return 0;              |             |                         |
|                       |             |                         |
-}--------------------------------------------------------------|
Показать ответ и решение

Решение аналитически

Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:

|------------|--------------|
|-----k------|------s-------|
|     0      |      0       |
| 0 + 3 = 3  |  0 + 3 = 3   |
| 3 + 3 = 6  |  3 + 6 = 9   |
| 6 + 3 = 9  |  9 + 9 = 18  |
|            |              |
| 9 + 3 = 12 |18 + 12 =  30 |
-12-+-3-=-15--30-+-15-=--45-|

Так как на следующем шаге k = 15 + 3 = 18  , условие цикла while (k < 15)  не выполняется, значит, последнее значение s = 45  , именно его и выведет на экран программа.

Решение программой

s = 0
k = 0
while k < 15:
    k = k + 3
    s = s + k
print(s)

Ответ: 45

Ошибка.
Попробуйте повторить позже

Задача 5#5843

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

|------------------------------------|--------------------------------------|
|Python------------------------------|C++-----------------------------------|
|def f(x) :                          |#include  <  iostream  >               |
|   return4  ∗ x ∗ x − 7 ∗ abs(x ) + 375|usingnamespacestd;                  |
|                                    |                                      |
|a =  − 12                           |intf (intx ){                          |
|b = 12                              |   return4 ∗ x ∗ x − 7 ∗ abs (x ) + 375;
|M  =  a                             |}                                     |
|R  = f(a)                           |intmain  (){                           |
|f oriinrange (a,b + 1) :             |   inta, b,M, R;                       |
|                                    |                                      |
|   if f(i) < R :                     |   a = − 12;b = 12;                   |
|     M  = i                         |   M  = a;R  = f(a);                  |
|     R =  f(i)                      |   for(inti = a;i <= b;i + + )        |
|print(M  )                          |     if(f(i) < R ){                    |
|                                    |       M  =  i;                        |
|                                    |                                      |
|                                    |       R  = f(i);                     |
|                                    |     }                                |
|                                    |   cout < < M ;                       |
|                                    |   return0;                           |
|                                    |                                      |
--------------------------------------}-------------------------------------|
Показать ответ и решение

Решение аналитически

Рассмотрим цикл. В переменной R  хранится какое-то значение функции, в цикле мы рассматриваем все значения функции y = f(x )  для x  ∈ [a;  b  ] и находим минимальное (из условия f (i) < R,  т.е., если, перебирая значения функции, мы видим значение меньше найденного ранее, мы его сохраняем — таким образом, мы сохраняем все меньшее и меньшее значение или не меняем его — значит, ищем минимум), записывая его значение и x,  при котором это значение достигается, в переменные R  и M  соответственно. Обратим внимание, что, если минимальное значение будет достигнуто еще раз, условие внутри цикла не будет выполнено, т.к. знак неравенства строгий.

Таким образом, мы ищем M  — абсциссу точки минимума.

Рассмотрим f(x) = 4x2 − 7|x| + 375  и построим график функции: при неотрицательных x  получаем f (x ) = 4x2 − 7x + 375,  функция симметрична относительно оси y  (четная, т.к. f(− x) = f (x )),  тогда отражением получаем такой график:

PIC

Из него легко увидеть, что минимум впервые достигается в x = − 1  — это и есть ответ.

Решение программой

def f(x):
    return 4 * x * x - 7 * abs(x) + 375

a = -12
b = 12
M = a
R = f(a)
for i in range(a, b+1):
    if f(i) < R:
        M = i
        R = f(i)
print(M)

Ответ: -1

Ошибка.
Попробуйте повторить позже

Задача 6#5842

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

|-------------------------------------|---------------------------------------|
|Python-------------------------------|C++------------------------------------|
|def f(x) :                           |#include  <  iostream  >                |
|  return17  ∗ (14 − x) ∗ (14 − x ) + 19|usingnamespacestd;                   |
|                                     |                                       |
|a = − 20                             |intf (intx ){                           |
|b = 20                               |   return17 ∗ (14 − x) ∗ (14 − x) + 19;|
|M  = a                               |}                                      |
|R =  f(a)                            |intmain  (){                            |
|foriinrange (a,b + 1) :              |   inta, b,M, R;                        |
|                                     |                                       |
|  iff (i) < R  :                      |   a = − 20;b = 20;                    |
|     M  = i                          |   M  = a;R  = f(a);                   |
|     R = f (i)                        |   for(inti = a;i <= b;i + + )         |
|print(R )                            |     if(f(i) < R ){                     |
|                                     |       M  =  i;                         |
|                                     |                                       |
|                                     |       R  = f(i);                      |
|                                     |     }                                 |
|                                     |   cout < < R;                         |
|                                     |   return0;                            |
|                                     |                                       |
---------------------------------------}--------------------------------------|
Показать ответ и решение

Решение аналитически

Рассмотрим функцию f(x) = 17 ⋅ (14 − x) ⋅ (14 − x) + 19 = 17 ⋅ (x − 14) ⋅ (x − 14 ) + 19 = 17 ⋅ (x − 14 )2 + 19  —- графиком является парабола ветвями вверх, функция принимает только значения не меньше 19, т.к. выражение 17         2
⋅ (x − 14)   всегда неотрицательно.

Рассмотрим цикл. В переменной R  хранится какое-то значение функции, в цикле мы рассматриваем все значения функции y = f (x)  для x  ∈ [a;  b]  и находим минимальное (из условия f (i) < R,  т.е., если, перебирая значения функции, мы видим значение меньше найденного ранее, мы его сохраняем — таким образом, мы сохраняем все меньшее и меньшее значение или не меняем его — значит, ищем минимум), записывая его значение и x,  при котором это значение достигается, в переменные R  и M  соответственно. Обратим внимание, что, если минимальное значение будет достигнуто еще раз, условие в цикле не будет выполнено, т.к. знак неравенства строгий.

Ищем минимальное значение. Т.к. функция принимает только значения не меньше 19, минимальное, которое может быть, —- f(x) = 19.  Покажем, что это значения достигается при x  ∈  [a;b] :  действительно, при x =  14  функция принимает значение 19. Значит, ответ: 19.

Решение программой

def f(x):
    return 17 * (14 - x) * (14 - x) + 19

a = -20
b = 20
M = a
R = f(a)
for i in range(a, b+1):
    if f(i) < R:
        M = i
        R = f(i)
print(R)

Ответ: 19

Ошибка.
Попробуйте повторить позже

Задача 7#5841

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

|------------------------------|--------------------------------|
|P-ython-----------------------|C--+-+--------------------------|
|def f(x) :                    |#include  <  iostream  >         |
|   return17  ∗ (x − 4 ) ∗ (x − 7)|usingnamespacestd;              |
|                              |                                |
|a = − 20                      |intf (intx ){                    |
|b = 20                        |   return17 ∗ (x − 4) ∗ (x − 7);|
|M  =  a                       |}                               |
|R  = f(a)                     |intmain  (){                     |
|f oriinrange (a,b + 1) :       |   inta, b,M, R;                 |
|                              |                                |
|   if f(i) < R :               |   a = − 20;b = 20;             |
|     M  = i                   |   M  = a;R  = f(a);            |
|     R = f (i)                 |   for(inti = a;i <= b;i + + )  |
|print(M  )                    |     if(f(i) < R ){              |
|                              |       M  =  i;                  |
|                              |                                |
|                              |       R  = f(i);               |
|                              |     }                          |
|                              |   cout < < M ;                 |
|                              |   return0;                     |
|                              |                                |
--------------------------------}-------------------------------|
Показать ответ и решение

Решение аналитически

Рассмотрим функцию f(x) = 17 ⋅ (x − 4) ⋅ (x − 7) :

Знаем, что при раскрытии скобок мы получим положительный коэффициент перед x2 :  действительно, при перемножении скобок  2
x   возникнет только при умножении x  на x,  который далее домножится на 17. Тогда, так как коэффициент перед  2
x   положителен, график f (x)  — парабола ветвями вверх с нулями в x = 4  и x =  7.  Известно, что абсцисса вершины параболы — среднее арифметическое абсцисс корней, значит, — 5.5. Значение минимума (вершины): 17 ⋅ 1.5 ⋅ (− 1.5) = − 38.25.

Рассмотрим цикл. В переменной R  хранится какое-то значение функции, в цикле мы рассматриваем все значения функции y = f (x)  для x  ∈ [a;  b]  и находим минимальное (из условия f (i) < R,  т.е., если, перебирая значения функции, мы видим значение меньше найденного ранее, мы его сохраняем — таким образом, мы сохраняем все меньшее и меньшее значение или не меняем его — значит, ищем минимум), записывая его значение и x,  при котором это значение достигается, в переменные R  и M  соответственно. Обратим внимание, что, если минимальное значение будет достигнуто еще раз, условие в цикле не будет выполнено, т.к. знак неравенства строгий.

Таким образом, мы ищем минимальное значение функции и x, при котором это значение достигается в первый раз. Знаем, что парабола ветвями вверх достигает минимум в вершине, на всякий случай приведем график, который легко построить из рассуждений выше:

PIC

Заметим, что в программе рассматриваются только целые числа (обратите внимание на тип переменных), значит, x = 5.5  не подойдет. Тогда проверим два ближайших значения — f (5)  и  f(6).  f (5 ) = 17 ∗ 1 ∗ (− 2) = − 34, f (6) = 17 ∗ 2 ∗ (− 1) = − 34.  Так как мы ищем, когда минимальное значение достигнется первый раз, то в ответ записываем x = 5.  M  =  5,R = − 34.

Решение программой

def f(x):
    return 17 * (x - 4) * (x - 7)

a = -20
b = 20
M = a
R = f(a)
for i in range(a, b+1):
    if f(i) < R:
        M = i
        R = f(i)
print(M)

Ответ: 5

Ошибка.
Попробуйте повторить позже

Задача 8#5840

Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

|-------------------------------------------------|--------------------------------------------------|
|Python-------------------------------------------|C++-----------------------------------------------|
|deff (x) :                                       |#include  < iostream >                            |
|  returnabs (abs(x − 14) + abs(x − 7) − 19) + 12 |usingnamespacestd;                                |
|                                                 |                                                  |
|a = − 40                                         |intf(intx){                                       |
|b = 40                                           |  returnabs (abs(x − 14) + abs(x − 7) − 19) + 12; |
|M  = a                                           |}                                                 |
|R =  f(a)                                        |intmain (){                                       |
|foriinrange (a,b + 1) :                          |  inta,b,M, R;                                    |
|                                                 |                                                  |
|  iff (i) < R :                                   |  a = − 40;b = 40;                                |
|    M  =  i                                      |  M  = a; R = f (a);                              |
|    R  = f(i)                                    |  for(inti = a;i <=  b;i + + )                    |
|print(M  + R )                                   |    if(f (i) < R ){                                |
|                                                 |      M   = i;                                    |
|                                                 |                                                  |
|                                                 |      R  = f (i);                                  |
|                                                 |    }                                             |
|                                                 |  cout <<  M  + R;                                |
|                                                 |  return0;                                        |
|                                                 |                                                  |
---------------------------------------------------}-------------------------------------------------|
Показать ответ и решение

Первый способ. Рассмотрим функцию f (x) = ||x − 14| + |x −  7| − 19| + 12.  Построим график данной функции:

1) Построим y = |x − 14| + |x − 7 |,  раскрыв модули, определив знаки на соответствующих промежутках;

2) Сдвинем полученный график на 19 единиц вниз;

3) Теперь наложим знак модуля на полученное: все, что ниже оси x,  отразим относительно нее;

4) Последнее: сдвинем полученное на 12 единиц вверх.

График готов — теперь рассмотрим цикл. В переменной R  хранится какое-то значение функции, в цикле мы рассматриваем все значения функции y =  f(x)  для x  ∈ [a;  b]  и находим минимальное (из условия f(i) < R,  т.е., если, перебирая значения функции, мы видим значение меньше найденного ранее, мы его сохраняем — ищем минимум), записывая его и x,  при котором это значение достигается, в переменные R  и M  соответственно. Обратим внимание, что, если минимальное значение будет достигнуто еще раз, условие в цикле не будет выполнено, т.к. знак неравенства строгий.

Таким образом, мы ищем минимальное значение функции и x,  при котором это значение достигается в первый раз. Это легко сделать с помощью построенного графика:

PIC

По графику видим, что минимум в первый раз достигается при x = 1,  значение — y =  12.  Из кода легко понять, что рассматриваются только целые значения x.  Таким образом, получим M  = 1,  R  = 12  — вывод: 1 + 12 = 13.

Второй способ. Как и в первом способе, понимаем, что в программе для f(x ) = ||x − 14| + |x − 7| − 19| + 12  ищутся x  и y,  (их значения хранятся в M  и R, )  при которых функция впервые достигает минимальное значение, причем рассматриваем x  ∈ [a;  b].

Рассмотрим f(x) = ||x − 14 | + |x − 7| − 19 | + 12  и заметим, что f(x) ≥ 12,  т.к. ||x − 14| + |x − 7| − 19 | ≥ 0,  значит, минимум (т.е. значение), равный 12, достигается при ||x − 14| + |x − 7| − 19 | = 0,  т.е. при x = 1  и при x = 20.  Впервые минимальное значение достигнуто при x = 1,  значит, M  + R  = 1 + 12 = 13.

Третий способ. Перепишем код

def f(x):
    return abs(abs(x - 14) + abs(x - 7) - 19) + 12

a = -40
b = 40
M = a
R = f(a)
for i in range(a, b+1):
    if f(i) < R:
        M = i
        R = f(i)
print(M + R)

Ответ: 13

Ошибка.
Попробуйте повторить позже

Задача 9#5813

Определите наименьшее значение переменной k,  при котором программа, приведенная ниже, выведет ответ 17.

--------------------------------------------------
|Python                 |C++                      |
|-----------------------|-------------------------|
|def f(x) :             |#include <  iostream  >   |
|   returnx  ∗ x ∗ x     |usingnamespacestd;       |
|def g(x) :             |intf (intx ){              |
|   returnx  ∗ x         |  returnx ∗ x ∗ x;       |
|i = 1                  |}                        |
|                       |                         |
|k =  int(input ())       |intg (intx ){              |
|whilef (i) < g(i) ∗ k : |  returnx ∗ x;           |
|   i+  = 1              |}                        |
|print(i)               |intmain  (){               |
|                       |  intk,i = 1;            |
|                       |                         |
|                       |  cin >>  k;             |
|                       |  while(f (i) < g(i) ∗ k) |
|                       |    i + +;               |
|                       |  cout <<  i;             |
|                       |                         |
|                       |  return0;               |
-------------------------}------------------------|
Показать ответ и решение

Решение аналитически

То, что программа выведет ответ 17, означает, что последнее значение переменной i,  для которой условие цикла выполняется, равно 16 (когда для переменной i  выполняется условие цикла, ее значение увеличивается на один, т.е. для выведенного после выхода из цикла значения i  условие цикла выполнено не будет — последнее допустимое значение i  после выполнения условия цикла было увеличено на один).

Это означает, что 16 раз было выполнено f(i) < g(i) ⋅ k.  Подставим в данное неравенство сами функции f(i)  и g(i) :  i3 < i2 ⋅ k.  Преобразуем: i2 ⋅ (i − k) < 0.  Знаем, что i2 ≥ 0,  значит, при всех значениях i,  кроме 0, неравенство равносильно i − k < 0,  то есть k > i.

Для i  = 16 полученное неравенство выполнено. Значит, k > 16.

Для i  = 17 полученное неравенство уже выполнено быть не должно: иначе программа бы вывела ответ 18. Значит, k  ≥ 17.

Ищем наименьшее значение k.  Значит, наш ответ — 17.

Решение программой

def f(x):
    return x ** 3

def g(x):
    return x ** 2

for j in range(100):
    i = 1
    while f(i) < g(i) * j:
        i += 1
    if i == 17:
        print(j)
        break

Ответ: 17
Рулетка
Вы можете получить скидку в рулетке!