Автор | Сообщение |
|
Отправлено: 04.01.22 20:24. Заголовок: Задача 22 № 3680
Здравствуйте! Подскажите, пож., в чем ошибка. Все остальные задачи 22 на сайте решил с помощью доработки исходного алгоритма с помощью цикла. c = [] d = [] for x in range(1001): e = x a = 0 b = 0 for y in range(1001): f = y while x * y > 0: if x > 0: a = a + 1 if y > 0 and y % 7 > b: b = y % 7 x = x // 10 y = y // 7 if a == 4: c.append(e) if b == 5: d.append(f) print(c) print(d)
|
|
|
Ответов - 4
[только новые]
|
|
|
Отправлено: 04.01.22 23:04. Заголовок: Задача 22 № 3680
dim18 пишет: цитата: | Здравствуйте! Подскажите, пож., в чем ошибка. |
| Без отступов сложно судить о правильности кода. Но даже так, в списках c и d Вы отдельно собираете значения, при которых а=4 и b=5, а надо чтобы эти два условия выполнились вместе. Там, где в условии print(a, b) проверьте это условие и списки не нужны. Переприсваивание x нужно добавить и в цикл по y. А вообще, полезно делать анализ программы. В данном случае переменная а отвечает за то, сколько цифр в числе x (их 4), Наименьшее такое число 1000, и, в то же время деление по y тоже должно выполниться 4 раза. b - это наибольшая цифра (остаток от деления на 7) и b=5. Значит наименьшее число y = 7*7*7+5 =348 Ответ: 348*1000=348000
|
|
|
|
Отправлено: 05.01.22 09:08. Заголовок: Спасибо!
Спасибо! Не разобрался пока, как переносить алгоритм из PC с отступами. Уточните, что значит "Переприсваивание x нужно и в цикл по y". В цикле по y я фиксирую текущее значение в переменной f. Вариант с проверкой обоих условий одновременно не работает. А при разделении условий по х выдает ответ 1000. for x in range(1001): e = x a = 0 for y in range(1001): f = y b = 0 while x * y > 0: if x > 0: a = a + 1 if y > 0 and y % 7 > b: b = y % 7 x = x // 10 y = y // 7 if a == 4 and b == 5: print(e,f)
|
|
|
|
Отправлено: 05.01.22 11:56. Заголовок: dim18 пишет: Не раз..
dim18 пишет: цитата: | Не разобрался пока, как переносить алгоритм из PC с отступами. |
| Сверху в желтой рамочке написано: "Программы "заворачивайте" в тэг ... " dim18 пишет: цитата: | Уточните, что значит "Переприсваивание x нужно и в цикл по y" |
| for x0 in range(1001): x = x0 for y0 in range(1001): x = x0 y = y0 a = 0 b = 0 while x * y > 0: if x > 0: a = a + 1 if (y > 0) and (y % 7 > b): b = y % 7 x = x // 10 y = y // 7 if a == 4 and b == 5: print(x0*y0) Но, лучше отлаживать программу пошагово, тогда Вы сами научитесь находить ошибки.
|
|
|
|
Отправлено: 05.01.22 13:34. Заголовок: Спасибо!!!
Спасибо огромное за помощь! Я нашел решение, но "кривое". Сначала нахожу один параметр в цикле, потом его фиксирую в след. цикле и нахожу другой. Про переприсваивание в каждом вложенном цикле буду знать.
|
|
|
|