Математический форум Math Help Planet
Обсуждение и решение задач по математике, физике, химии, экономике Теоретический раздел |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
новый онлайн-сервис число, сумма и дата прописью |
|
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Страница 1 из 2 |
[ Сообщений: 12 ] | На страницу 1, 2 След. |
|
Автор | Сообщение | |
---|---|---|
Rembrant |
|
|
Дано: Стоимость Болтов =10, Гаек=5, Шайб =0.5; Определить количество комбинаций для общей суммы покупки в 100 рублей. При этом количество единиц товара при любой комбинации должна быть равна 100; Ответ: Количество комбинаций = 1; Болтов -1, Гаек -9, Шайб - 90; Моя программа переберает весь 1030301 комбинаций из 3-ох цифр от 0 до 100, и подставляет в 2 уравнения x + y + z = 100 (x*c1) + (y*c2) + (z*c3) = 100 где x, y, z это количество товара, а с1, с2, с3 это стоимость товара. Мне кажется есть более адекватный способ решения этой задачки. Подскажите, если есть идеи. |
||
Вернуться к началу | ||
Andy |
|
|
Пусть [math]x,~y,~z[/math] - количества болтов гаек и шайб соответственно. Тогда должны выполняться равенства
[math]x+y+z=100,~~~(1)[/math] [math]10x+5y+0,5z=100.[/math] Обе части второго равенства разделим на [math]0,5,[/math] чтобы избавиться от дробного коэффициента, и получим [math]20x+10y+z=200.~~~(2)[/math] Получили систему двух линейных уравнений (1) и (2) с тремя неизвестными. Вычтем из уравнения (2) уравнение (1) и получим [math]19x+9y=100.~~~(3)[/math] В уравнении (3) коэффициенты при неизвестных - взаимно простые числа, а левая часть уравнения - целое число. Тогда это уравнение имеет целые решения. Найдём их: [math]9y=100-19x,[/math] [math]y=\frac{100-19x}{9}=\frac{99+1-18x-x}{9}=-2x+11-\frac{x-1}{9},[/math] [math]\frac{x-1}{9}=t,[/math] [math]x=9t+1,~~~(4)[/math] [math]y=-2(9t+1)+11-t=-19t+9,[/math] [math]y=-19t+9.~~~(5)[/math] Придавая параметру [math]t[/math] различные целочисленные значения, из уравнений (4), (5) можно найти значения [math]x[/math] и [math]y,[/math] а зная их, можно найти [math]z[/math] из уравнения (1). Можно, конечно, выразить [math]z[/math] через [math]t[/math]: [math]z=100-x-y=100-(9t+1)-(-19t+9)=10t+90.[/math] В любом случае обнаруживается, что единственным значением параметра, удовлетворяющим смыслу задачи, является [math]t=0,[/math] при котором [math]x=1,~y=9,~z=90[/math] - неотрицательные целые числа. Я думаю, что подбора значений параметра [math]t[/math] можно избежать, если найти область его целочисленных значений, удовлетворяющих условию задачи. Имеем [math]x=9t+1 \ge 0,[/math] тогда [math]t \ge 0,[/math] [math]y=-19t+9 \ge 0,[/math] тогда [math]t \le 0,[/math] [math]z=10t+90 \ge 0,[/math] тогда [math]t \ge -9,[/math] и из первых двух неравенств сразу видно, что [math]t=0[/math] и только. |
||
Вернуться к началу | ||
За это сообщение пользователю Andy "Спасибо" сказали: Rembrant |
||
Rembrant |
|
|
Спасибо большое, но немного не то что я хотел.
В программировании используются переменные и циклы, а они работают немного по другой логике. Программа выполняет цикл (повторяемые действия) до тех пор пока выполняется заданное условие. В моем случае она изменяет 3 переменных X, Y, Z. Выглядит это так. X Y Z 0 0 1 0 0 2 0 0 3 Подбор значений как в кодовом замке. До тех пор пока каждая переменная не пройдет путь от 0 до 100. После каждого изменения на единицу происходит проверка на равенство {X+Y+Z=100} & {(X*10)+(Y*5)+(Z*0.5)=100} Если равенство выполняется (обе стороны уравнения равны) для обоих уравнений, в дополнительную переменную (которая является счетчиком) прибавляется +1. Но такая программа выполняет несколько миллионов одинаковых действий чтоб найти всего одно правильное значение. Это не рационально. Мне нужна некая логическая закономерность которую я не заметил ( или математическое правило которое я не знаю), чтоб добавить ее в условия выполнения цикла и таким образом уменьшить количество итераций. В любом случае спасибо за старания. |
||
Вернуться к началу | ||
sergebsl |
|
|
Дорогой Рембрандт )
Вам предложили оптимальное решение средствами математического программирования Вам что нужно? Код перебора вариантов? |
||
Вернуться к началу | ||
sergebsl |
|
|
Обратитесь , пожалста, к кодерам )
|
||
Вернуться к началу | ||
Rembrant |
|
|
Я только начал учится, поэтому я слабо представляю как такой алгоритм можно включить в программу. А даже если получится, это будет строк 50, а мой код всего строк 15. И второе, сейчас мы проходим тему - Циклы, поэтому заданные задачки нужно решать именно так). И третье, ник RembranDt был занят)
Ладно, еще раз спасибо за старания, можете закрывать тему. |
||
Вернуться к началу | ||
sergebsl |
|
|
[math]\lg{super n!} = \sum \limits_{k=1}^{n} \lg{k!} \sim \frac{ n }{ 2 }\lg{2 \pi } \sum \left[ \left( k + \frac{ 1 }{ 2} \right)\lg{k} - k\lg{e} \right][/math]
|
||
Вернуться к началу | ||
sergebsl |
|
|
Простите меня, пожалста, формулу не туда воткнул )))
|
||
Вернуться к началу | ||
Andy |
|
|
Rembrant, я всего лишь предложил Вам "более адекватный способ решения этой задачи", как Вы и просили. Но программированием на алгоритмических языках я не интересуюсь, поэтому дать Вам совет по реализации этого способа не могу. Попробуйте задать вопрос на http://www.cyberforum.ru.
|
||
Вернуться к началу | ||
Shadows |
|
|
Ну, если задача по программированию, то да - надо писать циклы, но это уж совсем нерационально
Rembrant писал(а): Подбор значений как в кодовом замке. До тех пор пока каждая переменная не пройдет путь от 0 до 100.После каждого изменения на единицу происходит проверка на равенство {X+Y+Z=100} & {(X*10)+(Y*5)+(Z*0.5)=100} Хотя быДля X от 0 до 100 Программировать - хорошо, но с умом. |
||
Вернуться к началу | ||
На страницу 1, 2 След. | [ Сообщений: 12 ] |
Часовой пояс: UTC + 3 часа [ Летнее время ] |
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |