есть ряд натуральных чисел, необходимо используя шаги +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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.