Форум » Выполнение и анализ алгоритмов для исполнителей » Задача 5 номер 215 » Ответить

Задача 5 номер 215

AnnaPershina: Нашла два числа 508 и 805. Не могу найти ещё 2. В ответе 4 числа

Ответов - 7

Поляков: AnnaPershina пишет: Не могу найти ещё 2. 580 и 850.

dim18: Здравствуйте! Подскажите, пож., в чем ошибка? В задачах 212, 213 этот алгоритм дает правильный ответ. [pre2] for i in range(100, 1000): a = str(i)[0] b = str(i)[1] c = str(i)[2] max_i = max(int(a), int(b), int(c)) min_i = min(int(a), int(b), int(c)) av_i = int(a) + int(b) + int(c) - max_i - min_i i_max = str(max_i) + str(av_i) i_min = str(min_i) + str(av_i) if int(i_max) - int(i_min) == 14 and i_min[0] != '0' and i_max[0] != '0': print(i) [/pre2]

Поляков: [pre2] TARGET = 35 count = 0 for x in range(100, 1000): s = sorted( str(x) ) if s[0] == '0': if s[1] == '0': mi = ma = int(s[2]+'0') else: mi = int( s[1] + '0' ) ma = int( s[2] + s[1] ) else: mi = int( s[0] + s[1] ) ma = int( s[2] + s[1] ) R = ma - mi if R == TARGET: print( x ) count += 1 print( count ) [/pre2]


dim18: Спасибо!

s11kai: А Поляков пишет: [pre2] TARGET = 35 count = 0 for x in range(100, 1000): s = sorted( str(x) ) if s[0] == '0': if s[1] == '0': mi = ma = int(s[2]+'0') else: mi = int( s[1] + '0' ) ma = int( s[2] + s[1] ) else: mi = int( s[0] + s[1] ) ma = int( s[2] + s[1] ) R = ma - mi if R == TARGET: print( x ) count += 1 print( count ) [/pre2] Красиво! Но можно чуточку короче, и понятнее, если избавится от вложенных условий, например так: [pre2] k = 0 for x in range(100, 1000): s = sorted( str(x) ) if s.count('0') == 2: ma = mi = int(s[2]+'0') if s.count('0') == 1: mi = int(s[1]+s[0]) else: mi = int( s[0] + s[1] ) ma = int( s[2] + s[1] ) if ma - mi == 35: k+=1 print(k) [/pre2]

s11kai: подумал, что, когда получаем два нолика, будет правильнее не присваивать минимальному значение максимального, а просто не обрабатывать данный случай. Программа при этом может выглядеть как то так: [pre2] k = 0 for x in range(100, 1000): s = sorted( str(x) ) if s.count('0') != 2: if s.count('0') == 1: mi = int(s[1]+s[0]) else: mi = int( s[0] + s[1] ) ma = int( s[2] + s[1] ) if ma - mi == 35: k+=1 print(k) [/pre2] Прошу прощения, пришлось вернуться к вложенным циклам

s11kai: Затупил, если случай с двумя ноликами не обрабатывать, то какой смысл его вообще рассматривать! [pre2] k = 0 for x in range(100, 1000): s = sorted( str(x) ) if s.count('0') == 1: mi = int(s[1]+s[0]) else: mi = int( s[0] + s[1] ) ma = int( s[2] + s[1] ) if ma - mi == 35: k+=1 print(k) [/pre2]



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