есть ряд натуральных чисел, необходимо используя шаги +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) thenbegin
a := '-'; b := '+';
end;
for i := 1to T div7do
s := s + a +'7';
T := T - 7 * (T div7);
for i := 1to T div5do
s := s + a + '5';
T := T - 5 * (T div5);
for i := 1to T div3do
s := s + a + '3';
T := T - 3 * (T div3);
if T <> 0thencase T of1: 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.