Форум » Циклы и ветвления » Задача 22 № 3680 » Ответить

Задача 22 № 3680

dim18: Здравствуйте! Подскажите, пож., в чем ошибка. Все остальные задачи 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

Винникова: 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

dim18: Спасибо! Не разобрался пока, как переносить алгоритм из 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)

Винникова: dim18 пишет: Не разобрался пока, как переносить алгоритм из PC с отступами. Сверху в желтой рамочке написано: "Программы "заворачивайте" в тэг [pre2]...[/pre2]" dim18 пишет: Уточните, что значит "Переприсваивание x нужно и в цикл по y" [pre2] 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) [/pre2] Но, лучше отлаживать программу пошагово, тогда Вы сами научитесь находить ошибки.


dim18: Спасибо огромное за помощь! Я нашел решение, но "кривое". Сначала нахожу один параметр в цикле, потом его фиксирую в след. цикле и нахожу другой. Про переприсваивание в каждом вложенном цикле буду знать.



полная версия страницы