Предмет: Информатика, автор: ivankhvostov2005

В магазине продается мастика в ящиках по a кг (тип 1), b кг (тип 2) и c кг (тип 3). Как купить ровно N кг мастики, не вскрывая ящики? Сколькими способами можно это сделать?

Входные данные
Входная строка содержит четыре числа, разделённые пробелами: a , b , c и N .

Выходные данные
В первой строке нужно вывести число K способов, которыми можно купить заданное количество мастики ( N кг), не вскрывая ящики. В каждой из последующих K строчек программа должна вывести (через пробелы) три числа, k a , k b и k c : количество ящиков 1, 2 и 3 типов для каждого из K вариантов закупки. Варианты должны выводиться в лексикографическом порядке: сначала варианты с наименьшим значением k a , для одинаковых k a – сначала варианты с наименьшим значением k b и т.д.
На C++

Ответы

Автор ответа: Netskila
9

Ответ:

#include <iostream>

using namespace std;

int main() {

   int n, a, b, c, s = 0;

   cin >> a >> b >> c >> n;

   

   for (int na = 0; na <= n / a; na++) {

       for (int nb = 0; nb <= (n - a * na) / b; nb++) {

           int kk = n - na * a - nb * b;

           if (kk >= 0 and kk % c == 0) s++;        

       }

   }

   cout << s << endl;

   for (int na = 0; na <= n / a; na++) {

       for (int nb = 0; nb <= (n - a * na) / b; nb++) {

           int ll = n - na * a - nb * b;

           if (ll >= 0 and ll % c == 0)

               cout << na << " " << nb << " " << ll / c << endl;

       }

   }

}

Объяснение:

Зашло на 100 баллов

Похожие вопросы
Предмет: Литература, автор: qwertyuiop19077
Предмет: Математика, автор: Аноним
Предмет: Алгебра, автор: iriris