Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ переход по нат. числам

Автор: compiler 13.02.2007 0:02

есть ряд натуральных чисел, необходимо используя шаги +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 13.02.2007 0:29

compiler, требуется уточнение задания... Что перед чем имеет преимущество? Почему, например, в приведенном примере ты сделал +3 +3 +3, а не +7 +5 -3 ?

Автор: compiler 13.02.2007 0:31

Цитата(volvo @ 12.02.2007 19:29) *

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

не принципиально. В моём алгоритме 7 вообще не используется, если важно то допустим 3

Автор: compiler 17.02.2007 1:09

поправка условия: чем меньше шагов тем лучше...

Автор: klem4 25.02.2007 0:13

Если еще актуально, вот код, но оптимального решения (наименьшее кол-во шагов) он не дает.

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.