Найти - Пользователи
Полная версия: ЕГЭ по информатике. Задание номер 17.
Начало » Центр помощи » ЕГЭ по информатике. Задание номер 17.
1
xrazed
Приветствую, форумчане. Возникла трудность со следующей задачей:
Рассматривается множество целых чисел, принадлежащих числовому отрезку (1045; 2299) (скобки квадратные в условии, однако на форуме при квадратных скобках содержание пропадает) , таких, что либо в них совпадают две последние цифры, либо они не делятся ни на 2, ни на 3.
Найдите количество таких чисел и их сумму.

Моя трудность заключается в том, что я не знаю, как проверить совпадение двух последних цифр.
Если можно, то решите как можно проще, ибо я новичок и всякие импорты модулей мне не совсем ясны.
Заранее спасибо!
AD0DE412
 in_list = [i for i in range(1045, 2300)]
print(in_list)
#print([i for i in in_list if str(i)[-1] == str(i)[-2]])
#print(filter(lambda x: str(x)[-1] == str(x)[-2], in_list))
out_list = []
for i in in_list:
    test = str(i)
    if test[-1] == test[-2]:
        out_list.append(i)
print(out_list)
xrazed
AD0DE412
Вы решаете детскую задачу очень не детским способом. Помучавшись, я сам ее решил. В моем понимании “простое” решение выглядит так:
 k = 0
sum = 0
for i in range(1045, 2299+1):
    if (i % 100 == 11 or i % 100 == 22 or i % 100 == 33 or i % 100 == 44 or i % 100 == 55 or i % 100 == 66 or i % 100 == 77 or i % 100 == 88 or i % 100 == 99 or i % 100 == 00) or (i % 2 != 0 and i % 3 != 0):
        k = k + 1
        sum = sum + i
        print(k, sum)
py.user.next
  
>>> n = 0
>>> s = 0
>>> for num in range(1045, 2299 + 1):
...     d1 = num % 10
...     d2 = num % 100 // 10
...     if d1 == d2 or (num % 2 != 0 and num % 3 != 0):
...         n += 1
...         s += num
... 
>>> print('quantity =', n, 'sum =', s)
quantity = 502 sum = 840148
>>>
doza_and
В качестве идеи.
 >>> (222122 % 100) % 11
0
>>> (222123 % 100) % 11
1
>>> (222199 % 100) % 11
0
>>> (222100 % 100) % 11
0
py.user.next
doza_and
В качестве идеи.
Плюсы от этого: быстрее операция происходит.
Минусы от этого: неясность, добавляется куча ограничений.

Ограничения какие:
1) Цифр должно быть две. Не три, не одна, не десять и не сто.
2) Цифры обязательно должны быть равны друг другу. Ни <одна больше другой>, ни <одна меньше другой>, ни <одна делится на столько, а другая на вот столько>.
3) Если цифр больше, то и условий может быть ещё больше. Выбрать числа, в которых есть палиндромы из цифр.

Короче, разложение на отдельные цифры даёт больше возможностей, даёт писать очень забубённые алгоритмы. Соответственно, таким путём можно решить очень много всяких задач, при этом оставаясь в рамках довольно простых и понятных алгоритмов.
AD0DE412
xrazed
Помучавшись, я сам ее решил.
молодец
xrazed
очень не детским способом
ну что значит не детским очень даже … я вас научу
PEHDOM
xrazed
В моем понимании “простое” решение выглядит так:
Нет, учитвая что это задание ЕГЭ по информатике, за такое:
 if (i % 100 == 11 or i % 100 == 22 or i % 100 == 33 or i % 100 == 44 or i % 100 == 55 or i % 100 == 66 or i % 100 == 77 or i % 100 == 88 or i % 100 == 99 or i % 100 == 00) or (i % 2 != 0 and i % 3 != 0):
я бы бил по рукам стальной линейкой отправлял на персдачу. То что вы написали назывется “китайский код” . Очень часто китайский код пишут тупые студенты, которые пришли учиться программировать по неясным причинам. Выражение «ебу и патчу» произошло благодаря как раз таким случаям. https://lurkmore.to/%D0%98%D0%BD%D0%B4%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4#mws_upT1Sjm


Самый “простой” вариант вам уже предложил AD0DE412 ( приведя к строке и сравнивая два последних символа ), но этот метод “простой” для пайтона, на какомнить паскале или не дай бог, бейсике, вам пришлось бы делать как предложил py.user.next через математику.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB