Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Палиндромы

431
03 января 2009 года
sherry
207 / / 16.10.2006
Доброго времени суток!
Есть задача следующего характера:
Цитата:
Задано натуральное М. Если число не палиндром – записываем его в обратном порядка и слагаем с заданным. Действия повторяем до тех пор, пока не получим число-палиндром. количество выполненных операций назовем уровнем палиндромности заданного числа.ла М.
Найти уровень палиндромности заданного числа М.
Ввод-вывод данных через текстовый файл.



Имеется решение к вышеописанной задачке:

Код:
var
  f,f1: Text;
  a,s,t,u,i: Integer;
begin
  Assign(f, 'input.txt');
  Reset(f);
  Assign(f1, 'output.txt');
  Rewrite(f1);
  Readln(f, a);
  u := 0; // уровень
  Writeln(f1, a); // считываем  число из файла
  repeat // понеслась
    s := 0; // тут будет текущего числа палиндром
    t := a; // тут храним само число
    i := -1; // здесь будет счётчик цифр в числе
    while a > 0 do
     begin
       a := a div 10;
       Inc(i); // типо цифры посчитали
     end;
    a := t;
    while a > 0 do
     begin
       s := s + round((a mod 10)*exp(i*ln(10))); // сделали палиндром
       a := a div 10;
       Dec(i);
     end;
    a := t;
    if a <> s then // проверили условие
     begin
       Writeln(f1, s, ' + ', a, ' = ', s+a); // это так, для себя написал - промежуточные результаты контролировать
       Inc(u);
       a := a + s;
     end;
  until a = s; // закончили
  Writeln(f1, u); // записали результат
  Close(f);
  Close(f1);
end.


Алгоритм работает неправильно. Ткните носом в ошибку :o
360
05 января 2009 года
P*t*
474 / / 15.02.2007
Цитата: sherry

Алгоритм работает неправильно.


А в чём выражается неправильность? Я ошибки не вижу.

38K
05 января 2009 года
joeed
25 / / 23.12.2008
Какие исходные данные, что должно было получиться и что получилось?
431
05 января 2009 года
sherry
207 / / 16.10.2006
В том-то и проблема, что природа ошибки мне неизвестна.. И контр-примеров нет :( Человек говорит, что неправильно и всё тут. А где неправильно и на каком примере падает - молчит. Я в растерянности..
38K
07 января 2009 года
joeed
25 / / 23.12.2008
Контрольный пример 1
a=0 s=0 должно получиться s=0, u=0 Ok
Контрольный пример 2
a=1 (палиндром) s=1
360
08 января 2009 года
P*t*
474 / / 15.02.2007
Какие ограничения на число во входном файле?
Если 10004 ещё допустимо, то произойдёт переполнение. Возможно это и есть ошибка.
431
08 января 2009 года
sherry
207 / / 16.10.2006
входящий параметр ограничен: 0 < a < 10000
38K
08 января 2009 года
joeed
25 / / 23.12.2008
Попробуйте заменить s := s + round((a mod 10)*exp(i*ln(10)));
на s := s + round((a mod 10)*exp(i*ln(10)))/10 и i=-1 на i=0;
431
08 января 2009 года
sherry
207 / / 16.10.2006
joeed
результат не изменится.
я специально даю переменной i значение -1, чтобы потом избегать деления на 10. попробуйте потестить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог