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

Задача №2982

shervlad: Здравствуйте, в задаче поясните, пожалуйста, при работе с файлом А как там получается 75? Какое максимальное симметричное число должно получиться? Не совсем понимаю...

Ответов - 3

Поляков: shervlad пишет: Какое максимальное симметричное число должно получиться? 666321111777111123666.

Белов: Получил другой результат для файла Б: 508803 против 508801. Посмотрел предложенные решения. Разница в том, что оба варианта для центрального числа предлагают 959 (сумма цифр - 23). Но ведь число 898 (25) тоже встречается нечётное количество раз и сумма цифр больше. Почему было выбрано последнее симметричное (наибольшее) число, а не число с наибольшей суммой цифр? При этом в программе 27-39.py этот выбор есть (строка 37), но он закомментирован. PS. В решениии Кабанова (27-39cabanov.py) в последней строке опечатка - к сумме прибавляется число m, а должна прибавляться сумма цифр числа m. Исходный код моей реализации: [pre2] var a: array [100..999] of integer; n, x, s, pairs, center: integer; f: text; function is_valid(num: integer): boolean; begin is_valid := (num mod 10 <> 0); end; function is_sym(num: integer): boolean; begin var n1 := num mod 10; num := num div 10; var n2 := num mod 10; num := num div 10; var n3 := num mod 10; is_sym := (n1 = n3); end; function sum(num: integer): integer; begin var n1 := num mod 10; num := num div 10; var n2 := num mod 10; num := num div 10; var n3 := num mod 10; sum := n1 + n2 + n3; end; function reverse(num: integer): integer; begin var n1 := num mod 10; num := num div 10; var n2 := num mod 10; num := num div 10; var n3 := num mod 10; reverse := n1 * 100 + n2 * 10 + n3; end; begin assign(f, '27-39b.txt'); reset(f); read(f, n); loop n do begin read(f, x); inc(a[x]); end; close(f); s := 0; center := 0; for var i := 100 to 999 do begin if is_valid(i) and (a[ i] <> 0) then begin if is_sym(i) then begin pairs := (a[ i] div 2) * 2; if (a[ i] mod 2 = 1) and (sum(i) > center) then center := sum(i); end else begin pairs := min(a[ i], a[reverse(i)]); end; s := s + pairs * sum(i); end; end; println(s, center, s + center); end. [/pre2]

Поляков: Белов пишет: Почему было выбрано последнее симметричное (наибольшее) число, а не число с наибольшей суммой цифр? По условию требуется определить "наибольшее значение с симметричной записью". При выборе центрального числа 898 вместо 959 полученное симметричное число меньше.




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