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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2008, 16:10   #1
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Плохо Задачки на лето

Здравствуйте уважаемые форумчане!
Пожалуйста помогите решить задачку, а то летом мало решал их и в голову ничего не идет! Прошу решить не полностью, а хотя бы идеи по решению или наброски, заранее всем спасибо, кто откликнется!!
Ученик Вася потерял дневник. Не специально. Просто так потерял. В его дневнике были только пятерки, четверки и тройки, и Вася знал общее количество K своих оценок. А еще Вася почему-то помнил сумму S всех своих оценок.
Требуется составить программу, которая восстанавливает оценки Васи, т.е. находит все возможные наборы из K чисел, в которые входят только пятерки, четверки и тройки с общей суммой S.
Технические требования:
Входной файл: INPUT.TXT.
Выходной файл: OUTPUT.TXT.


Формат входных данных:
Входной файл INPUT.TXT содержит два разделенных пробелом целых числа K и S, задающих соответственно общее число и сумму оценок из дневника Васи
Формат выходных данных:
Выходной файл OUTPUT.TXT содержит число –1, если нет ни одного требуемого набора. Если же имеются N воз-можных наборов, то выходной файл содержит N строк. В каждой строке содержатся три разделенных пробелом целых числа — количество пятерок, количество четверок, количест-во троек.

Пример файла входных данных:
8 35
Пример файла выходных данных:
3 5 0
4 3 1
5 1 2
Вот...
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 05.08.2008, 16:47   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Это задача из темы Решение линейных Диофантовых уравнений. Нужно найти целочисленные решения системы уравнений, где количество уравнений меньше числа неизвестных. В паскале такие задачи решаются так:
Код:
for x:=0 to s div 3 do
for y:=0 to s div 4 do
for z:=0 to s div 5 do
if (3*x+4*y+5*z=s) and(x+y+z=k)
then writeln(x,' ',y,' ',z,' ');
где x,y,z-количество троек, четверок, пятерок.
Посмотрел внимательнее условие и вношу поправку. Если в дневнике точно были 3,4,5, то циклы нужно делать не от ноля, а от 1.

Последний раз редактировалось puporev; 05.08.2008 в 18:27.
puporev вне форума Ответить с цитированием
Старый 05.08.2008, 21:36   #3
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Пример файла входных данных:
8 35
Пример файла выходных данных:
3 5 0
4 3 1
5 1 2
Почему не выводит 3 5 0?
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 05.08.2008, 21:46   #4
PAWLO1993
Пользователь
 
Регистрация: 24.03.2008
Сообщений: 31
По умолчанию

Вот, виводит все как у примере выходных данных:
Код:
Program NoName;
var x,y,z,s,k:integer;
Begin 
readln(k,s);
for x:=0 to s div 3 do   
for y:=0 to s div 4 do   
for z:=0 to s div 5 do   
if (3*x+4*y+5*z=s) and(x+y+z=k)   
then writeln(z,' ',y,' ',x)
end.
PAWLO1993 вне форума Ответить с цитированием
Старый 05.08.2008, 21:48   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если начинать циклы с ноля, то выводит, если с единицы, то естественно не выводит. Вы определитесь с условием. Написано
Цитата:
В его дневнике были только пятерки, четверки и тройки
Значит все эти оценки были хотя бы по 1 разу, т.е цикл нужно начинать с 1. Если хотите, чтобы были ноли, начинайте с ноля. Я все это написал в своем предыдущем посте.
puporev вне форума Ответить с цитированием
Старый 05.08.2008, 23:09   #6
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

А расскажите пожалуйста, про тему Решение линейных Диофантовых уравнений, в которой нужно найти целочисленные решения системы уравнений, где количество уравнений меньше числа неизвестных. (ход решения задачи). Просто я не порнял ход решения
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 05.08.2008, 23:19   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А Вы наберите в Гугле ""линейные Диофантовы уравнения" и почитайте, я так рассказать не смогу. Кратко: составляется уравнение типа ax+by=с и находятся его целочисленные решения. Есть методы решения "на бумаге", есть машинные. У нас два уравнения, или ситема. 1-если (количество троек*3)+(количество четверок*4)+(количество пятерок*5)=заданной сумме, 2. количество троек+количество четверок+количество пятерок=заданному количеству оценок. Если оба условия совпадают, то компьютер выдает все возможные решения на экран, это же можно сделать вручную.

Последний раз редактировалось puporev; 05.08.2008 в 23:22.
puporev вне форума Ответить с цитированием
Старый 06.08.2008, 10:04   #8
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

спасибо Вам большое! я просто вчера недопонял. как задача решается, а перед сном просто спокойно обдумал и все понял!
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прощай, лето. GreenDan Свободное общение 10 04.10.2008 12:24
задачки мандаринка Паскаль, Turbo Pascal, PascalABC.NET 3 02.02.2008 17:02
Задачки на Си Cyn4uk Помощь студентам 3 06.12.2007 23:51
Задачки по С Aero Помощь студентам 3 04.10.2007 18:41