Помощь - Поиск - Пользователи - Календарь
Полная версия: переход по нат. числам
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
compiler
есть ряд натуральных чисел, необходимо используя шаги +3, -3, +5, -5, +7, -7 периходить от одного числа к другому

на входе 1 и 10
на выходе +3 +3 +3

мои соображения добавлять 3 до тех пор пока b-a<=2{a=от, b=до}. затем если а=b -- конец, если а<b на 2 то +5 -3, если а<b на 1 +3 +3 -5
но этот алгоритм не общий(а если a>b)

хотелось бы увидеть нестоль алгоритм как реализацию...

заранее благодарен
volvo
compiler, требуется уточнение задания... Что перед чем имеет преимущество? Почему, например, в приведенном примере ты сделал +3 +3 +3, а не +7 +5 -3 ?
compiler
Цитата(volvo @ 12.02.2007 19:29) *

преимущество?

не принципиально. В моём алгоритме 7 вообще не используется, если важно то допустим 3
compiler
поправка условия: чем меньше шагов тем лучше...
klem4
Если еще актуально, вот код, но оптимального решения (наименьшее кол-во шагов) он не дает.
uses crt;

function GetSequence(const _from, _to: Integer): String;
var
  T, i: Integer;
  s: String;
  a, b: char;

begin

  T := ABS(_to - _from);

  s := '';

  a := '+'; b := '-';

  if (_from > _to) then begin
    a := '-'; b := '+';
  end;

  for i := 1 to T div 7 do
   s := s + a +'7';

  T := T - 7 * (T div 7);

  for i := 1 to T div 5 do
   s := s + a + '5';

  T := T - 5 * (T div 5);

  for i := 1 to T div 3 do
   s := s + a + '3';

  T := T - 3 * (T div 3);

  if T <> 0 then case T of
    1: s := s + a + '7' + b + '3' + b + '3';
    2: s := s + a + '5' + b + '3';
    4: s := s + a + '7' + b + '3';
  end;

  GetSequence := s;

end;

begin
  clrscr;
  writeln(GetSequence(2, -11));
  readln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.