|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2007, 12:16 | #1 |
Регистрация: 29.10.2007
Сообщений: 7
|
Разложение числа на слагаемые
Помогите , может кто знает.
Надо написать алгоритм который раскладывает число на слагаемые , которые на числовой прямой стоят друг за другом. ---------- Пример 1: Ввод=6 Вывод=1+2+3 Пример 2: Ввод=25 Вывод=3+4+5+6+7 ---------- И еще надо чтобы это количество слагаемых было максимальным. Алгоритмик этот нужен очень срочно , можно сказать от него зависит (ну еще других задач сделанных мной) в какой ВУЗ я попаду |
29.10.2007, 12:32 | #3 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
ни в какой ..
Берегите друг друга!
|
29.10.2007, 17:34 | #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. |
30.10.2007, 08:30 | #5 |
Форумчанин
Регистрация: 07.08.2007
Сообщений: 154
|
WittySpark при -1 код валится. Количество слагаемых не максимально.
|
30.10.2007, 10:43 | #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 |