IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Выяснить если число можно представить как суму факториалов.
DarkWishmaster
сообщение 31.01.2011 19:37
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 168
Пол: Мужской

Репутация: -  3  +


вообщем надо выяснить если число может быть сумой из факториалов, если да, то показать на экране эти числа.
Например:
INPUT - 145->
Output:5!+4!+1!=145

var   i,n,s,j,m:integer;                                                      
function F(n:integer):integer;
var i,p:integer;
begin
p:=1;
for i:=1 to n do begin
p:=p*i; end;
F:=p;
end; {Factorial}
begin clrscr;
readln(n);
while m<=n do begin
inc(i);
m:=F(i); j:=i; end; {самый близкий факториал}
while j>0 do begin
j:=j-1;
s:=s+F(j);
if s>n then begin s:=s-F(j); j:=j-1;
end;
end;
if s=n then writeln('YES') else writeln('NO'); readln
end.

Ну вроде бы разобрался как выяснить если можно представить как суму из факториалов, но как вывести на экран?

Вот вариант:

  while m<=n do begin                                                      
║ inc(i);
║ m:=F(i); j:=i; end; {factorial apropiat}
║ while j>1 do begin
║ j:=j-1;
║ s:=s+F(j); l:=s;
║ if s>n then begin x:=x+1; s:=s-F(j); end;
║ if l=s then a[x]:=l;
║ end;
║ if s=n then begin
║ for i:=1 to x do begin
║ write(a[x],'!'); if i<x then write('+'); end;
║ write('=',n); end else writeln('Nu poate');

║ readln;
║ end.

В принципе должен работать, только вот почему то тут (l:=s; ) x получает значение сумы s:=s+F(j). например если n=145, то тут x сразу получает 120 ( 5!)



Сообщение отредактировано: DarkWishmaster - 31.01.2011 20:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 5.02.2011 4:49
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


М
DarkWishmaster, флуд в твоей теме - такой же, как и в других. Начатая тобой тема не есть твоя собственность. Потрудись сделать новую тему для новой задачи.



И, кстати, в то, что ты там написал, я не смог врубиться.. обхясни четче. И НЕ НАДО ЧУЖИХ ПРОГРАММ. Давай условие и свои наработки. На фига нам тут чужой хлам?? ты думаешь это облегчает задачу, что ли? ты ошибаешься.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 5.02.2011 8:00
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 168
Пол: Мужской

Репутация: -  3  +


Lapp,

Я щас изучаю одну книгу по алогоритмам, и там всё написано так что-бы можно было применить для любых языков програмирование.
Но всё, разобрался, в паскале эту функцию выполняет Copy, спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"