11 / 11 / 2
Регистрация: 15.07.2016
Сообщений: 132
1

Определить количество комбинаций шайб, гаек и болтов для общей суммы покупки в 100 рублей

16.08.2016, 14:33. Показов 1397. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задачка по программированию.
Дано:
Стоимость Болтов =10, Гаек=5, Шайб =0.5;
Определить количество комбинаций для общей суммы покупки в 100 рублей. При этом количество единиц товара при любой комбинации должна быть равна 100;

Ответ: Количество комбинаций = 1;
Болтов -1, Гаек -9, Шайб - 90;

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include < iostream>
#include <clocale>
using namespace std;
 
void main() {
    setlocale(LC_ALL, "Rus");
    int cnt = 0, kol = 100;
    float sum = 100, c1 = 10, c2 = 5, c3 = 0.5, x = 0, y = 0, z = 0;
    for (x = 0; x <= kol; x++) {
        for (y = 0; y <= kol; y++)
            for (z = 0; z <= kol; z++)
                if (x + y + z == kol && (x*c1) + (y*c2) + (z*c3) == sum) {
                    cnt++; cout << "Болтов-" << x << " " << "Гаек-" << y << " " << "Шайб-" << z << " " << endl;
                }
    }
    cout << "Количество комбинаций =" << cnt << endl;
    system("pause");
}
Данный код выполняет миллион итераций для нахождения одного правильного значения. Можно ли сократить количество циклов добавив некую логическую закономерность которую я не заметил? Или улучшить код?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2016, 14:33
Ответы с готовыми решениями:

Какое количество автомобилей можно собрать, закупив N болтов, M шайб и K гаек?
Для сборки одного автомобиля необходимо 100 болтов, 200 шайб и 90 гаек. Какое количество...

Какое количество автомобилей можно собрать, закупив N болтов, M шайб и K гаек?
Для сборки одного автомобиля необходимо 100 болтов, 200 шайб и 90 гаек. Какое количество...

Мужику на 100 рублей нужно купить 100 голов скота. Теленок стоит 0,5(50коп), корова стоит 5 рублей, бык 10 рублей.Вывести количество скота которого мо
Мужику на 100 рублей нужно купить 100 голов скота. Теленок стоит 0,5(50коп), корова стоит 5 рублей,...

Приложение для определения общей стоимости покупки
Разработайте приложение для определения общей стоимости покупки (в рублях и долларах). Название...

8
Заблокирован
16.08.2016, 14:39 2
C++
1
2
3
4
    for (x = 0; x <= kol; x++) {
        for (y = 0; y+x <= kol; y++)
        {
            z=kol-y-x;
1
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
16.08.2016, 14:55 3
Цитата Сообщение от Pavel Rem Посмотреть сообщение
Можно ли сократить количество циклов добавив некую логическую закономерность которую я не заметил? Или улучшить код?
Конечно можно. У вас три неизвестных (x ,y, z) и два уравнения (Cx*x+Cy*y+Cz*z=100 и Cx+Cy+Cz=100).
Можно обойтись одним циклом. Фиксируем x на каждой итерации (т.к. его стоимость самая большая - потребуется меньше всего итераций, пока Cx*x не превысит 100). Все у нас известен x и Cx*x - переносим их в правую часть и решаем систему из двух уравнений с двумя неизвестными. Даже решать не нужно, достаточно проверить, что решения целые (Это будет видно из решения в общем виде).

Возможно ли получить ответ вообще без цикла - надо подумать, что лень
1
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
16.08.2016, 15:53 4
шаг 1. Очевидно, что количество шайб кратно 10 - иначе не получить ровно 100 рублей. Далее проверяем только кратные 10 значения.
шаг 2. Если шайб менее 90 (80 и т.п. - других позиций >= 20, что при минимальной цене в 5 выводит за бюджет), если более 90 - не весь бюджет будет освоен. То есть остается распределить 10 позиций и 55 рублей.
шаг 3. далее или перебираем или вычитаем из 55 10*(цена самой дешевой позиции), а разницу делим на (цена болта - цена гайки), результат - сколько болтов. Остальное гайки.
Так как задачка на программирование, то вспоминаем предпочтения препода по объемам кода и либо ограничиваемся перебором 11*21*11 вариантов (шайб - от 0 до 100 с шагом 10, гаек - 0..20 с шагом 1, болтов 0..10, еще можно при выходе за бюджет или сумму переменных циклов сворачивать вложенные циклы) либо оформляем в код размышения выше.
1
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
16.08.2016, 22:47 5
Цитата Сообщение от avgoor Посмотреть сообщение
Возможно ли получить ответ вообще без цикла - надо подумать, что лень
x + y + z= 100
10x + 5y + 0.5z = 100
Избавляемся от z (из удвоенного второго вычитаем первое):
19x + 9y = 100
Перебираем руками целые x от 0 до 5 - это несложно.

ЗЫ Ну или как у Поля Дирака: 10 болтов, -10 гаек и 100 шайб
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
17.08.2016, 11:57 6
Цитата Сообщение от _Ivana Посмотреть сообщение
Перебираем руками целые x от 0 до 5 - это несложно.
Я то же самое писал Я имел ввиду через какие-нибудь функции Эйлера и т.п.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2016, 14:14 7
avgoor, в принципе, если бы вариантов было не 6 а побольше, можно было бы подумать про более серьезные алгоритмы отсечения лишних вариантов, и что-нибудь вывести из этого, и т.п. Но поскольку 6 вариантов перебрать руками - пара секунд, то энергетически выгоднее не искать сложностей
0
avgoor
17.08.2016, 16:36
  #8

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
ЗЫ Ну или как у Поля Дирака: 10 болтов, -10 гаек и 100 шайб
А это мысль! Если развить идею: откаты удобно считать через комплексные числа с мнимыми шайбами. :D

0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.08.2016, 17:02 9

Не по теме:

avgoor, да, но если расширить множество допустимых решений до комплексных чисел, то чисто мнимые шайбы так придется компенсировать мнимыми частями болтов и гаек - результирующая сотня должна быть красивой и действительной :)



Добавлено через 9 минут

Не по теме:

ЗЫ avgoor, кстати, я тут на тему этой задачки свою создал - про банки и Васю, там в конце концов общими усилиями уточнили условие, можете полюбопытствовать.

0
17.08.2016, 17:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2016, 17:02
Помогаю со студенческими работами здесь

Расчет общей суммы по полю запроса и доли значения каждой записи от общей суммы
Здравствуйте. В БД на аксесс 2013 есть запрос который выводит следующие данные: за выбранный период...

Линейные алгоритмы. Определить суммы, необходимые для покупки отдельных товаров и общую сумму
помогите пожалусто решить в паскале не фига не врубаюсь и не понимаю: Ресторан закупает...

Определить минимальное количество купюр, необходимое для покупки
Часто граждане пытаются выяснить, насколько богатыми являются депутаты. Некоторые верят, что...

Определить количество быков, коров и телят для покупки исходя из их цены
Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10...

Определить, что нужно, чтобы приготовить S литров коктейлей общей стоимостью Р рублей
В кафе готовят коктейль из малинового и ананасового соков. Известно, что X литров малинового сока...

Куплено n папок по x рублей и m пачек бумаги по y рублей. Определите стоимость p всей покупки
Куплено n папок по x рублей и m пачек бумаги по y рублей. Определите стоимость p всей покупки.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru