Форум » Обработка числовых последовательностей » Вопрос по 27.39 » Ответить

Вопрос по 27.39

cabanov.alexey: Уже довольно долго ломаю голову над этой задачей. 27А ответ получается, а в 27B получается 508803. Не пойму где у меня ошибка. :( Моё решение: [pre2] f = open("27b.txt") n = int(f.readline()) d = dict() for i in range(n): x = f.readline().strip() if x in d: d[x] += 1 else: d[x] = 1 summa = 0 for i in range(100,999+1): s = str(i) s1 = s[::-1] if (s in d) and (s1 in d) and s!=s1: k = min(d[ s ], d[s1]) summa+=2*k*sum(map(int,s)) summa = summa/2 m = 0 for i in range(100,999+1): s = str(i) s1 = s[::-1] if (s in d) and (s1 in d) and s==s1: k = d[ s ] if k%2==1: k-=1 m = max(m, sum(map(int,s)) ) summa+=k*sum(map(int,s)) print(summa+m)[/pre2]

Ответов - 6

Поляков: cabanov.alexey пишет: Не пойму где у меня ошибка. В файле 27-39.py в архиве 27data.zip есть авторское решение в моей обработке.

cabanov.alexey: У меня есть вопрос по вот этому фрагменту авторского решения: [pre2] maxCenter = 0 for x in range(1000): if symmCount[x] % 2 == 1: maxCenter = x[/pre2] Мы находим максимальное симметричное число, которое можно поставить в центр. Но максимум мы определяем по значению числа, а надо бы по сумме цифр. Авторский алгоритм ставит в центр 959, мой же ставит 898, у которого сумма цифр больше.

Поляков: cabanov.alexey пишет: Мы находим максимальное симметричное число, которое можно поставить в центр. Но максимум мы определяем по значению числа, а надо бы по сумме цифр. Вы правы, спасибо. Ответ и решение исправлены.


cabanov.alexey: Вы правы, спасибо. Нет, всё таки я не прав! Слона то я и не приметил! По условию задачи необходимо собрать симметричное число с наибольшим значением и узнать его сумму цифр. А я считал симметричное число с наибольшей суммой цифр, не акцентируясь на значении числа, а зря! Получается так, что действительно 959 по центру приоритетнее 858, так как значение числа будет больше. Так что ответ действительно 508801

cabanov.alexey: Моё исправленное решение: [pre2] f = open("27b.txt") n = int(f.readline()) d = dict() for i in range(n): x = f.readline().strip() if x in d: d[x] += 1 else: d[x] = 1 summa = 0 for i in range(100,999+1): s = str(i) s1 = s[::-1] if (s in d) and (s1 in d) and s!=s1: k = min(d[ s ], d[s1]) summa+=2*k*sum(map(int,s)) summa = summa/2 m = 0 for i in range(100,999+1): s = str(i) s1 = s[::-1] if (s in d) and (s1 in d) and s==s1: k = d[ s ] if k%2==1: k-=1 m = max(m, int(s) ) summa+=k*sum(map(int,s)) print(summa+m)[/pre2]

Поляков: Да, я тоже читать не умею. Вернул все назад.



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