есть ряд натуральных чисел, необходимо используя шаги +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)
хотелось бы увидеть нестоль алгоритм как реализацию...
заранее благодарен
compiler, требуется уточнение задания... Что перед чем имеет преимущество? Почему, например, в приведенном примере ты сделал +3 +3 +3, а не +7 +5 -3 ?
поправка условия: чем меньше шагов тем лучше...
Если еще актуально, вот код, но оптимального решения (наименьшее кол-во шагов) он не дает.
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.