Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2007, 12:16   #1
Oleg-vp
 
Аватар для Oleg-vp
 
Регистрация: 29.10.2007
Сообщений: 7
Восклицание Разложение числа на слагаемые

Помогите , может кто знает.
Надо написать алгоритм который раскладывает число на слагаемые , которые на числовой прямой стоят друг за другом.
----------
Пример 1:
Ввод=6
Вывод=1+2+3
Пример 2:
Ввод=25
Вывод=3+4+5+6+7
----------
И еще надо чтобы это количество слагаемых было максимальным.

Алгоритмик этот нужен очень срочно , можно сказать от него зависит (ну еще других задач сделанных мной) в какой ВУЗ я попаду
Oleg-vp вне форума Ответить с цитированием
Старый 29.10.2007, 12:31   #2
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Смотри тут
Aristarh Dark вне форума Ответить с цитированием
Старый 29.10.2007, 12:32   #3
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

ни в какой ..
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 29.10.2007, 17:34   #4
WittySpark
Пользователь
 
Регистрация: 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.
WittySpark вне форума Ответить с цитированием
Старый 30.10.2007, 08:30   #5
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

WittySpark при -1 код валится. Количество слагаемых не максимально.
Aristarh Dark вне форума Ответить с цитированием
Старый 30.10.2007, 10:43   #6
Oleg-vp
 
Аватар для Oleg-vp
 
Регистрация: 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.
Oleg-vp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числа в строку 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