![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 29.10.2007
Сообщений: 7
|
![]()
Помогите , может кто знает.
Надо написать алгоритм который раскладывает число на слагаемые , которые на числовой прямой стоят друг за другом. ---------- Пример 1: Ввод=6 Вывод=1+2+3 Пример 2: Ввод=25 Вывод=3+4+5+6+7 ---------- И еще надо чтобы это количество слагаемых было максимальным. Алгоритмик этот нужен очень срочно , можно сказать от него зависит (ну еще других задач сделанных мной) в какой ВУЗ я попаду ![]() |
![]() |
![]() |
![]() |
#3 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
![]()
ни в какой ..
Берегите друг друга!
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 14.08.2007
Сообщений: 13
|
![]()
Протестировал код, работает. Разберёшься, надеюсь.
Удачи! program demo; {$APPTYPE CONSOLE} var x, left, right, i: Integer; begin Readln(x); left := 1; right := Round((Sqrt(1+8*x)-1)/2); while (right*(right+1)-left*(left-1) <> 2*x) do begin if (right*(right+1)-left*(left-1) < 2*x) then begin right := right + 1; end else begin left := left + 1; end; end; for i := left to right do begin Write(i, ' '); end; Readln; end. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 07.08.2007
Сообщений: 154
|
![]()
WittySpark при -1 код валится. Количество слагаемых не максимально.
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 29.10.2007
Сообщений: 7
|
![]()
входящие числа от 1 до 10^9;
так что -1 нормально входит. Но есть ограничение по времени = 1 секунда. WittySpark спасибо большое за алгоритм, только при введенном числе 10^9 вылетает (раверно из-за функций Round или Sqrt) я сделал , чтобы твой алгоритм показывал не последовательность , а сразу максимальное число слагаемых , т.к так сказано первоначально в условии задачи подправленный алгоритм WittySpark's: program demo; uses SysUtils; {$APPTYPE CONSOLE} var x, left, right, i: Integer; begin Readln(x); left := 1; right := Round((Sqrt(1+8*x)-1)/2); while (right*(right+1)-left*(left-1) <> 2*x) do begin if (right*(right+1)-left*(left-1) < 2*x) then begin right := right + 1; end else begin left := left + 1; end; end; Write(right-left+1); //здесь я как раз и заменил , чтобы вывод был сразу максимального Readln; end. Мой алгоритм, примитивный, но тут все математически просто и он может обработать число 10^9: program Razloz_Chisla; var InX,x,y,Sum,Res:integer; FIn,FOut:Text; begin AssignFile(FIn,'input.txt'); AssignFile(FOut,'output.txt'); Reset(FIn); ReWrite(FOut); Read(FIn,InX); x:=0; repeat inc(x); Sum:=x; y:=x; if x=InX then Res:=1 else begin repeat inc(y); Sum:=Sum+y; until Sum>=InX; if Sum=InX then Res:=y-x+1; end; until (Sum=InX)or(X=InX); WriteLn(FOut,Res); Close(FOut); Close(FIn); end. Последний раз редактировалось Oleg-vp; 30.10.2007 в 11:01. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Числа в строку | DeDoK | Общие вопросы Delphi | 8 | 07.06.2008 00:08 |
Разложение введенного слова в виде дерева на дельфи | Gauss | Общие вопросы Delphi | 7 | 23.03.2008 21:57 |
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа | Woland-itn | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 23.03.2008 21:49 |
Разложение в ряд Маклорена | Mari | Помощь студентам | 2 | 03.02.2008 23:23 |
Про числа | Акашаев Нурлан | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 12.12.2007 07:18 |