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

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

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

 
 Ответить  Открыть новую тему 
> Выяснить если число можно представить как суму из чисел 5 и 3.
DarkWishmaster
сообщение 23.01.2011 16:01
Сообщение #1


Бывалый
***

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

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


Привет.
Задача: выяснить если число может быть записано как сума из чисел 5 и 3.
Например 11=5+3+3 или 16=5+5+3+3.
У меня получилось если только в суме все числа 3 и одна 5 или наоборот например 11 или 23 но если 16=5+5+3+3 то тут тупик.
Может у вас есть идеи, спасибо заранее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.01.2011 16:16
Сообщение #2


Гость






Может и есть... Если 5*X + 3*Y = S, то X = (S - 3*Y) / 5, где X - число пятерок, Y - число троек.

Вот и сделай цикл по Y от 0 и пока (S - 3*Y) >= 0. Если X - целое число, то ты нашел разложение суммы, если нет - проверяй следующий Y...
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 23.01.2011 16:29
Сообщение #3


Бывалый
***

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

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


Цитата(volvo @ 23.01.2011 17:16) *

Может и есть... Если 5*X + 3*Y = S, то X = (S - 3*Y) / 5, где X - число пятерок, Y - число троек.

Вот и сделай цикл по Y от 0 и пока (S - 3*Y) >= 0. Если X - целое число, то ты нашел разложение суммы, если нет - проверяй следующий Y...



║Program P1; uses crt;
║var x:real; p:boolean; y,s:integer;
║begin clrscr;
║ readln(s);
║ P:=false;
║ y:=0; x:=0;
║ while p=false do begin
║ x:=(s-(3*y))/5;
║ if x=round(x) then P:=true
║ else y:=y+1;
║ end;
║ writeln(P);
║ readln; readln;
║ end.
на все числа TRUE;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.01.2011 16:38
Сообщение #4


Гость






Я не это предлагал.
  while S - 3*y >= 0 do
begin
if (S - 3*y) mod 5 = 0 then
begin
writeln(S, ' = ', (S - 3*y) div 5, '*5 + ', Y, '*3');
exit;
end
else inc(y);
end;

прекрасно выдает ответ. Оптимизируешь сам...
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 23.01.2011 16:39
Сообщение #5


Бывалый
***

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

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


Цитата(volvo @ 23.01.2011 17:38) *

Я не это предлагал.
  while S - 3*y >= 0 do
begin
if (S - 3*y) mod 5 = 0 then
begin
writeln(S, ' = ', (S - 3*y) div 5, '*5 + ', Y, '*3');
exit;
end
else inc(y);
end;

прекрасно выдает ответ. Оптимизируешь сам...


Спасибо большое! Только вот из за exit; он выходит из цикла и ничего не выдает на экран.

Сообщение отредактировано: DarkWishmaster - 23.01.2011 16:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 24.01.2011 9:14
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


так надо разложить или просто написать, возможно/невозможно?
разложений же может быть несколько. тогда - какое из них выводить?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.01.2011 10:18
Сообщение #7


Гость






Цитата
Только вот из за exit; он выходит из цикла и ничего не выдает на экран.
Только вот ПЕРЕД Exit он выдает найденное разложение. Если совсем ничего не написал - значит, не нашел.
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 24.01.2011 23:26
Сообщение #8


Бывалый
***

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

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


Цитата(мисс_граффити @ 24.01.2011 10:14) *

так надо разложить или просто написать, возможно/невозможно?
разложений же может быть несколько. тогда - какое из них выводить?


Надо просто написать если это возможно, но принцип тот же.

Так в тот то и дело что число можно разложить, и если удалить exit то выводит разложение только в бесконечном цикле.
Он будет показывать только если удалить clrscr и заново ctrl+f9

Сообщение отредактировано: DarkWishmaster - 24.01.2011 23:30
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Volvo-
сообщение 25.01.2011 0:06
Сообщение #9


Гость






Цитата
Так в тот то и дело что число можно разложить, и если удалить exit то выводит разложение только в бесконечном цикле.
Он будет показывать только если удалить clrscr и заново ctrl+f9
Фантастика - на другом форуме. У меня, значит, работает, а у тебя - нет? Значит, показывай полный код, что ты там накрутил...
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 25.01.2011 14:39
Сообщение #10


Бывалый
***

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

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


Цитата(-Volvo- @ 25.01.2011 1:06) *

Фантастика - на другом форуме. У меня, значит, работает, а у тебя - нет? Значит, показывай полный код, что ты там накрутил...


║Program P1; uses crt;
║ var s,x,y,m:integer;
║ begin clrscr;
║ read(S);
║ while M>=0 do
║ begin
║ M:=S-3*y;
║ if M mod 5=0 then
║ begin
║ writeln(S,'=',M div 5,'*5+',Y,'*3');
║ exit;
║ end
║ else inc(y);
║ end;
║ readln;
║ end.

С оператором clrscr; о ничего не выводит на экран, без него он выходит из цикла, и потом снова ctrl+f9 и видешь результат
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.01.2011 14:46
Сообщение #11


Гость






Ты б читал число через ReadLn - проблемы б не было. А то число прочиталось, Enter остался в буфере клавиатуры. Потом ты делаешь вроде бы паузу. через ReadLn, ан нет - всего навсего прочитается то, что осталось в буфере. Так что, учи матчасть...
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 25.01.2011 15:34
Сообщение #12


Бывалый
***

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

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


Цитата(volvo @ 25.01.2011 15:46) *

Ты б читал число через ReadLn - проблемы б не было. А то число прочиталось, Enter остался в буфере клавиатуры. Потом ты делаешь вроде бы паузу. через ReadLn, ан нет - всего навсего прочитается то, что осталось в буфере. Так что, учи матчасть...

с ReadLN тот же эфект.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 25.01.2011 18:02
Сообщение #13


Профи
****

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

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


Молодой человек,у вас какое условие входа и выполнения в цикле?
Цитата
while M>=0 do

А извините где вы инициализировали само значение М?Уже в самом цикле......Либо сделайте инициализацию раньше, а потом меняйте в цикле,либо верните то,как было у Volvo,потому что то, что написал он и то ,что вы не равнозначно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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