Есть довольно простая задача, но меня что то заело и я не могу ее решить:) Нудно получить все возможные варианты получения суммы 100 из чисел 10, 20, 50 Не подскажите каким путем ее решить?
Здравствуйте, Alexei! то что ты просишь на языке математики называеться решение в целых чисель уравнению 10x+20y+50z = 100. Эти уравнении называються еще Диофантовы по имени древногреческого математика - Диофант, которы впервы занимался методов их решения.Алгоритм состоиться в общем в перебора всех вариантов целых чисель который являеться решении уравнению. Вот примерный : 1) Пологаем z = 1 и ищем решение у-ния 10x+20y = 50, здесь полагаем y = 1 и ищем решении 10x = 30 здесь все ясно x = 3 и вот тебе один вариант (x=3,y=1,z=1); 2) делаем шаг назад - полагаем y = 2, тогда х = 1 и вот тебе второй вариант (x=1,y=2,z=1); Если мы изключим 0(нуль) из целых чисель то это и все решения, а если не то 3) полагаем z = 2 и ищем в целых чисель решения 10x+20y=0, они только x=0, y=0- тройку (x=0,y=0,z=2)
другое решение уравнение 10x+20y=50, если положим y=0, то тогда x=5 и тройку (x=5,y=0,z=1) другое решение. Аналогично находим и другие решение (x=0,y=5,z=0), (x=10,y=0,z=0),(x=8,y=1,z=0),(x=6,y=2,z=0) (x=4,y=3,z=0),(x=2,y=4,z=0) И ето все резумируем Все решения уравнения 10x+20y+50z=100 в целых чисель : (5,0,1),(0,0,2),(1,2,1),(3,1,1),(0,5,0), (10,0,0),(8,1,0),(6,2,0),(4,3,0),(2,4,0) Если тебе нужна прога то пиши на мыло.
Ответ отправлен: 16.12.2002, 13:04 Отправитель: Tancho Отвечает Pinman
Доброе время суток, Alexei! var i,j,k:byte; . . . for i := 0 to 10 do for j := 0 to 5 do for k := 0 to 3 do if 10*i+20*j+30*k=100 then WriteLn(i:5,j:5,k:5); Ответ отправлен: 13.12.2002, 21:30 Отправитель: Pinman Отвечает Byter
Добрый день, Alexei! Вначале бери 10-ки Потом 10-ки и 20-ку Потом 10-ки и 20-ки(пока не возмешь максимум) Потом одни 20-ки Анологично с 50 и 20 ;с 10 и 20 Ну примерно также с 50 и 10 и 20 Просто лень писать на Паскале Ведь если ты над ней думал ,новерное паймешь
Ответ отправлен: 14.12.2002, 17:36 Отправитель: Byter Отвечает Melkor
Здравствуйте, Alexei! Наиболее простой способ - полный перебор всех вариантов, например с помощью циклов
Приложение: Ответ отправлен: 14.12.2002, 01:46 Отправитель: Melkor Отвечает portos
Доброе время суток, Alexei! самый простой вариант (но не самый быстрый) - берешь три счетчика к1,к2,к3 - по одному для каждого числа и делаешь три вложеных цикла for, к3, к2, к1. к1 - от нуля до 10, к2 - 0..5, к3 - 0..2, в последнем циклу проверяешь если к1*10+к2*20+к3*50=100 значит вот тебе и одно из решений Ответ отправлен: 14.12.2002, 13:21 Отправитель: portos
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.