Top.Mail.Ru
Ответы

Помогите решить задачу по программированию Python (ломаю голову уже неделю)

Выведите чётные числа из заданного диапазона, чтобы они шли в первой строке слева направо, в следующей справа налево, и дальше продолжали чередоваться построчно.

при этом можно использовать только циклы (списки, кортежи и т.д отменяются, так же отменяются все списочные выражения и методы строк)

помогите пожалуйста

Ввод: 10

75

8 (количество чисел в строке)

Вывод: 10 12 14 16 18 20 22 24 40 38 36 34 32 30 28 26 42 44 46 48 50 52 54 56 72 70 68 66 64 62 60 58 74

По дате
По рейтингу
Аватар пользователя
vladsvideosУченик
9мес
Изменено

Для решения задачи можно использовать два вложенных цикла: первый будет отвечать за перебор строк, а второй — за вывод чётных чисел в нужном направлении. Поскольку нельзя использовать списки и другие структуры данных, будем работать с числами напрямую.

Алгоритм решения:

  1. Получить начальное (a) и конечное (b) значения диапазона.

  2. Определить первое чётное число в диапазоне: если a нечётное, увеличить его на 1.

  3. Определить шаг для перебора чётных чисел (шаг = 2).

  4. Использовать внешний цикл для чередования направления вывода:

  • в первой итерации выводить числа слева направо;

  • во второй итерации — справа налево;

  • и так далее.

  1. Внутри внешнего цикла использовать внутренний цикл для перебора и вывода чётных чисел.

Пример реализации на Python:

123456789101112131415161718192021222324252627282930313233
# Ввод данных
a, b = map(int, input().split())

# Корректируем начальное значение, если оно нечётное
if a % 2 != 0:
    a += 1

# Определяем границы для вывода
start = a
end = b
step = 2
direction = 1  # 1 — слева направо, -1 — справа налево

while start <= b:
    # Определяем конечное значение для текущей строки
    current_end = start + 38  # 38 = 2 * 19 (19 чётных чисел по условию примера)
    if current_end > b:
        current_end = b

    # Внутренний цикл для вывода чисел
    if direction == 1:
        for num in range(start, current_end + 1, step):
            print(num, end=' ')
    else:
        for num in range(current_end, start - 1, -step):
            print(num, end=' ')

    print()  # Переход на новую строку

    # Обновляем границы для следующей строки
    start = current_end + 2
    direction *= -1  # Меняем направление

Пояснение:

  • Внешний цикл while отвечает за перебор строк.

  • Внутренний цикл for выводит числа в нужном направлении: слева направо или справа налево.

  • Переменная direction отвечает за направление вывода: 1 — слева направо, -1 — справа налево. После каждой строки направление меняется на противоположное.

  • Границы для каждой строки определяются так, чтобы выводить по 19 чисел (как в примере), но для последней строки учитывается ограничение конечного значения b.

Этот код выведет чётные числа из заданного диапазона, чередуя направление вывода на каждой строке, как требуется в задаче. Вы можете скорректировать количество чисел в строке (сейчас установлено 19), если это необходимо для других диапазонов.

Аватар пользователя
elarard_qimeenaneУченик
9мес
1234567891011
a, b, n = int(input()), int(input()) + 1, int(input())
start, is_forward = a + (a % 2), True
for s in range(start, b, n << 1):
    if is_forward:
        for num in range(s, min(s + (n << 1), b), 2):
            print(num, end=' ')
    else:
        for num in range(min(s + ((n - 1) << 1), b), s - 1, -2):
            print(num, end=' ')
    print()
    is_forward = not is_forward
Аватар пользователя
x_player2014Ученик
9мес
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
start = 10
end = 75
per_line = 8

if start % 2 != 0:
    start += 1

current = start
line_num = 1

while current <= end:
    nums = ""
    cnt = 0
    sub_start = current
    i = 0
    while i < per_line and current <= end:
        nums += str(current) + " "
        current += 2
        cnt += 1
        i += 1
    if line_num % 2 == 1:
        idx = 0
        value = ""
        num = ""
        while idx < len(nums):
            ch = nums[idx]
            if ch != " ":
                num += ch
            else:
                value += num + " "
                num = ""
            idx += 1
        print(value.rstrip())
    else:
        idx = len(nums)-1
        nums = nums.rstrip()
        numbers_printed = 0
        num = ""
        value = ""
        while idx >= 0:
            ch = nums[idx]
            if ch != " ":
                num = ch + num
            else:
                value += num + " "
                num = ""
                numbers_printed += 1
            idx -= 1
        if num != "":
            value += num + " "
        print(value.rstrip())
    line_num += 1
Аватар пользователя
x_player2014Ученик
9мес

start = 10

end = 75

per_line = 8

if start % 2 != 0:

start += 1

current = start

line_num = 1

while current <= end:

nums = ""

cnt = 0

sub_start = current

i = 0

while i < per_line and current <= end:

nums += str(current) + " "

current += 2

cnt += 1

i += 1

if line_num % 2 == 1:

idx = 0

value = ""

num = ""

while idx < len(nums):

ch = nums[idx]

if ch != " ":

num += ch

else:

value += num + " "

num = ""

idx += 1

print(value.rstrip())

else:

idx = len(nums)-1

nums = nums.rstrip()

numbers_printed = 0

num = ""

value = ""

while idx >= 0:

ch = nums[idx]

if ch != " ":

num = ch + num

else:

value += num + " "

num = ""

numbers_printed += 1

idx -= 1

if num != "":

value += num + " "

print(value.rstrip())

line_num += 1

Аватар пользователя
yarilishcheМудрец
9мес

Чем помочь? Сделать на халяву и бесплатно потратить на это своё время?

Аватар пользователя
dire_5269Ученик
9мес

а зачем тогда придуман мэил ру? почему вы вообще такой токсичный? если вы не можете помочь мне - просто пролистните, тем более я не прошу писать за меня курсовую, это обычная задача (с которой у меня сложности), но я думаю у более опытных программистов не будет с этим проблем



Видео по теме