Подбор слагаемых для нужной суммы excel
Это частный случай "задачи о рюкзаке", т.к. необходимо найти не оптимальный перечень слагаемых, а любую возможную комбинацию, удовлетворяющую заданным условиям. Думаю, что задача может иметь практическое применение.
У меня были некоторые наработки на эту тему, решил их доработать и опубликовать, а также хочется получить дополнительные материалы по эффективным алгоритмам.
Считаю, что данную задачу нужно решать с помошью макросов (все решения через поиск решения или формульные варианты не рассматриваю).
На текущий момент, самый быстрый способ решения, который мне попадался - это "макрос Слэна", но у него есть недостаток, решение не всегда может быть найдено. Как именно работает макрос я не разобрался, но думаю, что в основе лежит "жадный алгоритм" с перебором.
Если есть ссылки на хорошие алгоритмы или реализации, прошу поделиться
Прилагаю файл с разными решениями:
1. Случайная выборка, не самый лучший вариант, но может и он сгодиться
2. С применением динамического программирования. Сумма находится по целочисленным слагаемым, работает относительно быстро и если может быть решение - оно будет найдено. Скорость, а также объем выделяемой памяти сильно зависят от искомой суммы, в макросе введено ограничение - сумма не должна превышать 80 000 000. Подходит для решения дробных сумм, например, рубли с копейками, достаточно все суммы умножить на 100.
3. Преребор (brute force), возможно указать ограничения по количеству слагаемых, а также отсекает неоптимальные ветви решения, что позволило сделать приемлемый по скорости перебор, находит все решения подходящие под условия. Но для большого количества слагаемых метод не применим
4. Макрос Слэна, хороший быстрый алгоритм, но не всегда находит решение.
Реализация не окончательная, поэтому в готовые решеня не размещаю.
Хочется найти еще эффективные и быстрые варианты решения. Например, можно совместить частичный перебор с динамикой
UPD 27.02.2014: Обновлен алгоритм с перебором, стал существенно быстрее работать
Это частный случай "задачи о рюкзаке", т.к. необходимо найти не оптимальный перечень слагаемых, а любую возможную комбинацию, удовлетворяющую заданным условиям. Думаю, что задача может иметь практическое применение.
У меня были некоторые наработки на эту тему, решил их доработать и опубликовать, а также хочется получить дополнительные материалы по эффективным алгоритмам.
Считаю, что данную задачу нужно решать с помошью макросов (все решения через поиск решения или формульные варианты не рассматриваю).
На текущий момент, самый быстрый способ решения, который мне попадался - это "макрос Слэна", но у него есть недостаток, решение не всегда может быть найдено. Как именно работает макрос я не разобрался, но думаю, что в основе лежит "жадный алгоритм" с перебором.
Если есть ссылки на хорошие алгоритмы или реализации, прошу поделиться
Прилагаю файл с разными решениями:
1. Случайная выборка, не самый лучший вариант, но может и он сгодиться
2. С применением динамического программирования. Сумма находится по целочисленным слагаемым, работает относительно быстро и если может быть решение - оно будет найдено. Скорость, а также объем выделяемой памяти сильно зависят от искомой суммы, в макросе введено ограничение - сумма не должна превышать 80 000 000. Подходит для решения дробных сумм, например, рубли с копейками, достаточно все суммы умножить на 100.
3. Преребор (brute force), возможно указать ограничения по количеству слагаемых, а также отсекает неоптимальные ветви решения, что позволило сделать приемлемый по скорости перебор, находит все решения подходящие под условия. Но для большого количества слагаемых метод не применим
4. Макрос Слэна, хороший быстрый алгоритм, но не всегда находит решение.
Реализация не окончательная, поэтому в готовые решеня не размещаю.
Хочется найти еще эффективные и быстрые варианты решения. Например, можно совместить частичный перебор с динамикой
UPD 27.02.2014: Обновлен алгоритм с перебором, стал существенно быстрее работать MCH
Это частный случай "задачи о рюкзаке", т.к. необходимо найти не оптимальный перечень слагаемых, а любую возможную комбинацию, удовлетворяющую заданным условиям. Думаю, что задача может иметь практическое применение.
У меня были некоторые наработки на эту тему, решил их доработать и опубликовать, а также хочется получить дополнительные материалы по эффективным алгоритмам.
Считаю, что данную задачу нужно решать с помошью макросов (все решения через поиск решения или формульные варианты не рассматриваю).
На текущий момент, самый быстрый способ решения, который мне попадался - это "макрос Слэна", но у него есть недостаток, решение не всегда может быть найдено. Как именно работает макрос я не разобрался, но думаю, что в основе лежит "жадный алгоритм" с перебором.
Если есть ссылки на хорошие алгоритмы или реализации, прошу поделиться
Прилагаю файл с разными решениями:
1. Случайная выборка, не самый лучший вариант, но может и он сгодиться
2. С применением динамического программирования. Сумма находится по целочисленным слагаемым, работает относительно быстро и если может быть решение - оно будет найдено. Скорость, а также объем выделяемой памяти сильно зависят от искомой суммы, в макросе введено ограничение - сумма не должна превышать 80 000 000. Подходит для решения дробных сумм, например, рубли с копейками, достаточно все суммы умножить на 100.
3. Преребор (brute force), возможно указать ограничения по количеству слагаемых, а также отсекает неоптимальные ветви решения, что позволило сделать приемлемый по скорости перебор, находит все решения подходящие под условия. Но для большого количества слагаемых метод не применим
4. Макрос Слэна, хороший быстрый алгоритм, но не всегда находит решение.
Реализация не окончательная, поэтому в готовые решеня не размещаю.
Хочется найти еще эффективные и быстрые варианты решения. Например, можно совместить частичный перебор с динамикой
UPD 27.02.2014: Обновлен алгоритм с перебором, стал существенно быстрее работать Автор - MCH
Дата добавления - 25.06.2013 в 01:15
Не очень частый, но и не экзотический случай. На моих тренингах такой вопрос задавали не один и не два раза :) Суть в том, что мы имеем конечный набор каких-то чисел, из которых надо выбрать те, что дадут в сумме заданное значение.
В реальной жизни эта задача может выглядеть по-разному.
- Например, мы выгрузили из интернет-банка все платежи, которые поступили на наш счет за последний месяц. Один из клиентов разбивает сумму своего платежа на несколько отдельных счетов и платит частями. Мы знаем общую сумму оплаты и количество счетов, но не знаем их сумм. Надо подобрать те суммы в истории платежей, которые дадут в общем заданное значение.
- У нас есть несколько рулонов стали (линолеума, бумаги. ), из которых надо подобрать под заказ те, что дадут заданную длину.
- Блэкджек или в народе "очко". Надо набрать карты суммарной стоимостью максимально близкой к 21 баллу, но не превысить этот порог.
В некоторых случаях может быть известна разрешенная погрешность допуска. Она может быть как нулевой (в случае подбора счетов), так и ненулевой (в случае подбора рулонов), или ограниченной снизу или сверху (в случае блэкджека).
Давайте рассмотрим несколько способов решения такой задачи в Excel.
Способ 1. Надстройка Поиск решения (Solver)
Эта надстройка входит в стандартный набор пакета Microsoft Office вместе с Excel и предназначена, в общем случае, для решения линейных и нелинейных задач оптимизации при наличии списка ограничений. Чтобы ее подключить, необходимо:
- в Excel 2007 и новее зайти Файл - Параметры Excel - Надстройки - Перейти (File - Excel Options - Add-ins - Go)
- в Excel 2003 и старше - открыть меню Сервис - Надстройки (Tools - Add-ins)
и установить соответствующий флажок. Тогда на вкладке или в меню Данные (Data) появится нужная нам команда.
Чтобы использовать надстройку Поиск решения для нашей задачи необходимо будет слегка модернизировать наш пример, добавив к списку подбираемых сумм несколько вспомогательных ячеек и формул:
- Диапазон A1:A20 содержит наши числа, из которых мы будем выбирать нужные, чтобы "вписаться" в заданную сумму.
- Диапазон В1:B20 будет своего рода набором переключателей, т.е. будет содержать нули или единички, показывая, отбираем мы данное число в выборку или нет.
- В ячейке E2 стоит обычная автосумма всех единичек по столбцу B, подсчитывающая кол-во выбранных чисел.
- В ячейке E3 с помощью функции СУММПРОИЗВ (SUMPRODUCT) считается сумма попарных произведений ячеек из столбцов А и B (то есть A1*B1+A2*B2+A3*B3+. ). Фактически, здесь подсчитывается сумма чисел из столбца А, отобранных единичками из столбца В.
- В розовую ячейку E4 пользователь вводит желаемую сумму для подбора.
- В ячейке E5 вычисляется абсолютное по модулю значение погрешности подбора с целью ее будущей минимизации.
- Все желтых ячейках Е8:E17 хотелось бы получить список отобранных чисел, т.е. тех чисел из столбца А, напротив которых в столбце В есть единички. Для этого необходимо выделить сразу все (!) желтые ячейки и в них ввести вот такую формулу массива:
=ЕСЛИОШИБКА(ИНДЕКС($A$1:$A$20;НАИМЕНЬШИЙ(ЕСЛИ(B1:B20=1;СТРОКА(B1:B20);"");СТРОКА()-СТРОКА($E$8)+1));"")
=IFERROR(INDEX($A$1:$A$20;SMALL(IF(B1:B20=1;ROW(B1:B20);"");ROW()-ROW($E$8)+1));"")
После ввода формулы ее необходимо ввести не как обычную формулу, а как формулу массива, т.е. нажать не Enter, а Ctrl+Shift+Enter. Похожая формула используется в примере о ВПР, выдающей сразу все найденные значения (а не только первое).
Теперь перейдем на вкладку (или в меню) Данные и запустим инструмент Поиск решения (Data - Solver):
В открывшемся окне необходимо:
- Задать как целевую функцию (Target Cell) - ячейку вычисления погрешности подбора E5. Чуть ниже выбрать опцию - Минимум, т.к. мы хотим подобрать числа под заданную сумму с минимальной (а лучше даже нулевой) погрешностью.
- В качестве изменяемых ячеек переменных (Changing cells) задать диапазон столбца переключателей B1:B20.
- С помощью кнопки Добавить (Add) создать дополнительное условие на то, что ячейки диапазона B1:B20 должны быть бинарными (т.е. содержать только 0 или 1):
После ввода всех параметров и ограничений запускаем процесс подбора кнопкой Найти решение (Solve). Процесс подбора занимает от нескольких секунд до нескольких минут (в тяжелых случаях) и заканчивается появлением следующего окна:
Теперь можно либо оставить найденное решение подбора (Сохранить найденное решение), либо откатиться к прежним значениям (Восстановить исходные значения).
Необходимо отметить, что для такого класса задач существует не одно, а целое множество решений, особенно, если не приравнивать жестко погрешность к нулю. Поэтому запуск Поиска решения с разными начальными данными (т.е. разными комбинациями 0 и 1 в столбце В) может приводить к разным наборам чисел в выборках в пределах заданных ограничений. Так что имеет смысл прогнать эту процедуру несколько раз, произвольно изменяя переключатели в столбце В.
Найденные комбинации можно сохранять виде сценариев (кнопка Сохранить сценарий), чтобы вернуться к нем позднее с помощью команды Данные - Анализ "что-если" - Диспетчер сценариев (Data - What-If Analysis - Scenario Manager):
И весьма удобно будет вывести все найденные решения, сохраненные в виде сценариев, в одной сравнительной таблице с помощью кнопки Отчет (Summary):
Способ 2. Макрос подбора
В этом способе всю работу делает макрос, который тупо перебирает случайные комбинации чисел, пока не наткнется на нужную сумму в пределах разрешенной погрешности. Добавлять столбец с нулями и единичками и формулы в этом случае не нужно.
Для использования макроса нажмите сочетание Alt+F11, в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert - Module и скопируйте туда этот код:
Аналогично первому способу, запуская макрос несколько раз, можно получать разные наборы подходящих чисел.
P.S. Сейчас набегут энтузиасты с мехмата МГУ с криками "Тупой перебор - это неэстетично!" Да, я в курсе, что прямой перебор вариантов - это не самый оптимальный способ поиска. Да, существует много умных алгоритмов поиска решения таких задач, которые сокращают время поиска и находят нужную комбинацию заметно быстрее. Могу даже рассказать про парочку. Но мне на данном этапе существующей скорости "тупого перебора" вполне достаточно - обработка массива из 1000 ячеек идет меньше секунды. Готов подождать :)
Не очень частый, но и не экзотический случай. На моих тренингах такой вопрос задавали не один и не два раза :) Суть в том, что мы имеем конечный набор каких-то чисел, из которых надо выбрать те, что дадут в сумме заданное значение.
В реальной жизни эта задача может выглядеть по-разному.
- Например, мы выгрузили из интернет-банка все платежи, которые поступили на наш счет за последний месяц. Один из клиентов разбивает сумму своего платежа на несколько отдельных счетов и платит частями. Мы знаем общую сумму оплаты и количество счетов, но не знаем их сумм. Надо подобрать те суммы в истории платежей, которые дадут в общем заданное значение.
- У нас есть несколько рулонов стали (линолеума, бумаги. ), из которых надо подобрать под заказ те, что дадут заданную длину.
- Блэкджек или в народе "очко". Надо набрать карты суммарной стоимостью максимально близкой к 21 баллу, но не превысить этот порог.
В некоторых случаях может быть известна разрешенная погрешность допуска. Она может быть как нулевой (в случае подбора счетов), так и ненулевой (в случае подбора рулонов), или ограниченной снизу или сверху (в случае блэкджека).
Давайте рассмотрим несколько способов решения такой задачи в Excel.
Способ 1. Надстройка Поиск решения (Solver)
Эта надстройка входит в стандартный набор пакета Microsoft Office вместе с Excel и предназначена, в общем случае, для решения линейных и нелинейных задач оптимизации при наличии списка ограничений. Чтобы ее подключить, необходимо:
- в Excel 2007 и новее зайти Файл - Параметры Excel - Надстройки - Перейти (File - Excel Options - Add-ins - Go)
- в Excel 2003 и старше - открыть меню Сервис - Надстройки (Tools - Add-ins)
и установить соответствующий флажок. Тогда на вкладке или в меню Данные (Data) появится нужная нам команда.
Чтобы использовать надстройку Поиск решения для нашей задачи необходимо будет слегка модернизировать наш пример, добавив к списку подбираемых сумм несколько вспомогательных ячеек и формул:
- Диапазон A1:A20 содержит наши числа, из которых мы будем выбирать нужные, чтобы "вписаться" в заданную сумму.
- Диапазон В1:B20 будет своего рода набором переключателей, т.е. будет содержать нули или единички, показывая, отбираем мы данное число в выборку или нет.
- В ячейке E2 стоит обычная автосумма всех единичек по столбцу B, подсчитывающая кол-во выбранных чисел.
- В ячейке E3 с помощью функции СУММПРОИЗВ (SUMPRODUCT) считается сумма попарных произведений ячеек из столбцов А и B (то есть A1*B1+A2*B2+A3*B3+. ). Фактически, здесь подсчитывается сумма чисел из столбца А, отобранных единичками из столбца В.
- В розовую ячейку E4 пользователь вводит желаемую сумму для подбора.
- В ячейке E5 вычисляется абсолютное по модулю значение погрешности подбора с целью ее будущей минимизации.
- Все желтых ячейках Е8:E17 хотелось бы получить список отобранных чисел, т.е. тех чисел из столбца А, напротив которых в столбце В есть единички. Для этого необходимо выделить сразу все (!) желтые ячейки и в них ввести вот такую формулу массива:
=ЕСЛИОШИБКА(ИНДЕКС($A$1:$A$20;НАИМЕНЬШИЙ(ЕСЛИ(B1:B20=1;СТРОКА(B1:B20);"");СТРОКА()-СТРОКА($E$8)+1));"")
=IFERROR(INDEX($A$1:$A$20;SMALL(IF(B1:B20=1;ROW(B1:B20);"");ROW()-ROW($E$8)+1));"")
После ввода формулы ее необходимо ввести не как обычную формулу, а как формулу массива, т.е. нажать не Enter, а Ctrl+Shift+Enter. Похожая формула используется в примере о ВПР, выдающей сразу все найденные значения (а не только первое).
Теперь перейдем на вкладку (или в меню) Данные и запустим инструмент Поиск решения (Data - Solver):
В открывшемся окне необходимо:
- Задать как целевую функцию (Target Cell) - ячейку вычисления погрешности подбора E5. Чуть ниже выбрать опцию - Минимум, т.к. мы хотим подобрать числа под заданную сумму с минимальной (а лучше даже нулевой) погрешностью.
- В качестве изменяемых ячеек переменных (Changing cells) задать диапазон столбца переключателей B1:B20.
- С помощью кнопки Добавить (Add) создать дополнительное условие на то, что ячейки диапазона B1:B20 должны быть бинарными (т.е. содержать только 0 или 1):
После ввода всех параметров и ограничений запускаем процесс подбора кнопкой Найти решение (Solve). Процесс подбора занимает от нескольких секунд до нескольких минут (в тяжелых случаях) и заканчивается появлением следующего окна:
Теперь можно либо оставить найденное решение подбора (Сохранить найденное решение), либо откатиться к прежним значениям (Восстановить исходные значения).
Необходимо отметить, что для такого класса задач существует не одно, а целое множество решений, особенно, если не приравнивать жестко погрешность к нулю. Поэтому запуск Поиска решения с разными начальными данными (т.е. разными комбинациями 0 и 1 в столбце В) может приводить к разным наборам чисел в выборках в пределах заданных ограничений. Так что имеет смысл прогнать эту процедуру несколько раз, произвольно изменяя переключатели в столбце В.
Найденные комбинации можно сохранять виде сценариев (кнопка Сохранить сценарий), чтобы вернуться к нем позднее с помощью команды Данные - Анализ "что-если" - Диспетчер сценариев (Data - What-If Analysis - Scenario Manager):
И весьма удобно будет вывести все найденные решения, сохраненные в виде сценариев, в одной сравнительной таблице с помощью кнопки Отчет (Summary):
Способ 2. Макрос подбора
В этом способе всю работу делает макрос, который тупо перебирает случайные комбинации чисел, пока не наткнется на нужную сумму в пределах разрешенной погрешности. Добавлять столбец с нулями и единичками и формулы в этом случае не нужно.
Для использования макроса нажмите сочетание Alt+F11, в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert - Module и скопируйте туда этот код:
Аналогично первому способу, запуская макрос несколько раз, можно получать разные наборы подходящих чисел.
P.S. Сейчас набегут энтузиасты с мехмата МГУ с криками "Тупой перебор - это неэстетично!" Да, я в курсе, что прямой перебор вариантов - это не самый оптимальный способ поиска. Да, существует много умных алгоритмов поиска решения таких задач, которые сокращают время поиска и находят нужную комбинацию заметно быстрее. Могу даже рассказать про парочку. Но мне на данном этапе существующей скорости "тупого перебора" вполне достаточно - обработка массива из 1000 ячеек идет меньше секунды. Готов подождать :)
Суммируем ячейки по критерию
Необходимо вычислить общую сумму по каждому отделу. Многие делают это при помощи фильтра и записи ручками в ячейки.
Хотя сделать это можно легко и просто при помощи всего одной функции - СУММЕСЛИ.
СУММЕСЛИ (SUMIF) – Суммирует ячейки, удовлетворяющие заданному условию (условие можно задать только одно). Эту функцию так же можно применить, если таблица разбита в столбцах на периоды(помесячно, в каждом месяце по три столбца - Доход|Расход|Разница) и необходимо подсчитать общую сумму за все периоды только по Доходу, Расходу и Разнице.
Всего для СУММЕСЛИ предусмотрено три аргумента: Диапазон, Критерий, Диапазон_Суммирования.
=СУММЕСЛИ( A1:A20000 ; A1 ; B1:B20000 )
=SUMIF(A1:A20000,A1,B1:B20000)
- Диапазон ( A1:A20000 ) - указывается диапазон с критериями. Т.е. столбец, в котором искать значение, указанное аргументом Критерий.
- Критерий ( A1 )- значение(текстовое или числовое, а так же дата), которое необходимо найти в Диапазоне. Может содержать символы подстановки "*" и "?". Т.е. указав в качестве Критерия "*масса*" будут просуммированы значения, в которых встречается слово "масса". При этом слово " масса " может либо встречаться в любом месте текста, либо в ячейке может быть только одно это слово. А указав " масса* ", будут просуммированы все значения, начинающиеся на "масса". "?" - заменяет лишь один символ, т.е. указав " мас?а " вы сможете просуммировать строки и со значением "масса" и со значением "маска" и т.д.
Если критерий записан в ячейке и надо все же использовать подстановочные символы, то можно сделать ссылку на эту ячейку добавив нужное. Допустим, надо просуммировать значения, содержащие слово " итог ". Слово " итог " записано в ячейке A1 , в столбце A при этом могут встречаться различные по написанию значения, содержащие слово "итог" : "итоги за июнь" , "итоги за июль" , "итоги за март" . Формула тогда должна выглядеть так:
=СУММЕСЛИ( A1:A20000 ;"*"& A1 &"*"; B1:B20000 )
"*"& A1 &"*" - знак &(амперсанд) объединяет несколько значений в одно. Т.е. в результате получится "*итог*".
Чтобы лучше понять принцип работы формул лучше использовать инструмент Вычислить формулу: Как просмотреть этапы вычисления формул
Все текстовые критерии и критерии с логическими и математическими знаками необходимо заключать в двойные кавычки ( =СУММЕСЛИ( A1:A20000 ;"итог"; B1:B20000 ) ). Если критерием является число, использовать кавычки не требуется. Если требуется найти непосредственно вопросительный знак или звездочку, необходимо поставить перед ним знак "тильды" (~).
Про тильду и её особенности можно узнать в этой статье: Как заменить/удалить/найти звездочку? - Диапазон_Суммирования ( B1:B20000 )(необязательный аргумент) - указывается диапазон сумм или числовых значений, которые необходимо просуммировать.
Как это работает: функция ищет в Диапазоне значение, указанное аргументом Критерий, и при нахождении совпадения суммирует данные, указанные аргументом Диапазон_Суммирования. Т.е. если у нас в столбце А название отдела, а в столбце В суммы, то указав в качестве критерия "Отдел развития" результатом функции будет сумма всех значений столбца В, напротив которых в столбце А встречается "Отдел развития". Фактически Диапазон_Суммирования может не совпадать по размеру с аргументом Диапазон и ошибки самой функции это не вызовет. Однако при определении ячеек для суммирования, в качестве начальной ячейки для суммирования будет использована верхняя левая ячейка аргумента Диапазон_Суммирования , а затем суммируются ячейки, соответствующие по размеру и форме аргументу Диапазон .
Некоторые особенности
Последний аргумент функции(Диапазон_Суммирования - B1:B20000 ) является необязательным. А это значит, что его можно не указывать. Если его не указать, то функция просуммирует значения, указанные аргументом Диапазон. Для чего это нужно. Например, Вам необходимо получить сумму только тех чисел, которые больше нуля. В столбце А суммы. Тогда функция будет иметь такой вид:
=СУММЕСЛИ( A1:A20000 ;">0")
Что следует стоит учитывать: диапазон_суммирования и диапазон должны быть равны по количеству строк. Иначе можно получить неверный результат. Оптимально, если это будет выглядеть как в приведенных мной формулах: диапазон и диапазон_суммирования начинаются с одной строки и имеют одинаковое количество строк: A1:A20000 ; B1:B20000
Ложка дегтя: - СУММЕСЛИ(а так же СУММЕСЛИМН, СЧЁТЕСЛИ и иже с ними) всегда стремятся преобразовать все значения аргументов к типам. Это значит, что если у нас в ячейке записано число 23 - оно будет воспринято как число. Если тоже число будет записано как текст - "23" , то функция преобразует его сначала в число, а потом уже будет работать с ним. Т.е. и 23 и "23" у нас будут считаться одинаковым значением. С одной стороны это хорошо, но иногда такое поведение может сыграть злую шутку. Например, у Вас в ячейках столбца А расположены некие номера счетов, длина которых более 15-ти символов и могут иметь ведущие нули:
000 34889913131323455
00 34889913131323455
000 34889913131323477
как видно, первые два числа почти одинаковые, но у первого числа три ведущих нуля спереди, а второго - два. И это разные счета. А третий счет вообще отличается на последние цифры. Но СУММЕСЛИ после преобразования все три этих значения будет считать как число 348899131313234 00 и если записать функцию так: =СУММЕСЛИ( $A$1:$A$3 ; A1 ; $B$1:$B$3 ) , где в столбце В суммы для каждого счета, то она просуммирует значения для всех трех счетов, считая их одинаковыми. Особо обращаю внимание еще на тот факт, что все числа после 15-го знака будут преобразованы в нули. Эти особенности всегда необходимо учитывать при использовании данных функций, чтобы не попасть в неловкую ситуацию, когда результат будет некорректным.
Суммирование по двум и более критериям
Но что делать, когда критериев для суммирования 2 и больше? Допустим, Вам надо просуммировать только те суммы, которые относятся к одному отделу и только за определенную дату. Счастливые обладатели версий офиса 2007 и выше могут воспользоваться функцией СУММЕСЛИМН:
=СУММЕСЛИМН( $C$2:$C$50 ; $A$2:$A$50 ; $I$3 ; $B$2:$B$50 ; $H8 )
$C$2:$C$50 - диапазон_суммирования. Первым аргументов указывается диапазон ячеек, содержащих суммы, которые и будут собираться в одну.
$A$2:$A$50 , $B$2:$B$50 - Диапазон_критерия. Указывается диапазон ячеек, в которых необходимо искать совпадение по критерию.
$I$3 , $H8 - критерий. Здесь, как и в СУММЕСЛИ, допускается указание символов подстановки * и ? и работают они так же.
Особенность указания аргументов: сначала указывается диапазон критерия(они пронумерованы) затем через точку-с-запятой указывается непосредственно значение(критерий), которое в этом диапазоне необходимо найти - $A$2:$A$50 ; $I$3 . И никак иначе. Не стоит пытаться сначала указать все диапазоны, а потом критерии к ним - функция выдаст либо ошибку, либо просуммирует не то, что надо.
Все условия сравниваются по принципу И . Это значит, что если все перечисленные условия выполняются. Если хоть одно условие не выполняется - функция пропускает строку и ничего не суммирует.
Так же как и для СУММЕСЛИ диапазоны суммирования и критериев должны быть равны по количеству строк.
СУММЕСЛИМН так же как и СУММЕСЛИ приводит значения к типу, а это значит, что все числа с ведущими нулями и более 15 знаков могут быть вычислены некорректно.
Т.к. СУММЕСЛИМН появилась только в версиях Excel, начиная с 2007, то как же быть в таких случаях несчастным пользователям более ранних версий? Очень просто: использовать другую функцию - СУММПРОИЗВ. Не буду расписывать аргументы, т.к. их много и все они являются массивами значений. Данная функция перемножает массивы, указанные аргументами. Я постараюсь описать общий принцип использования этой функции для суммирования данных по нескольким условиям.
Для решения задачи суммирования по нескольким критериям функция будет выглядеть так:
=СУММПРОИЗВ(( $A$2:$A$50 = $I$3 )*( $B$2:$B$50 = H5 ); $C$2:$C$50 )
$A$2:$A$50 - диапазон дат. $I$3 - дата критерия, за которую необходимо просуммировать данные.
$B$2:$B$50 - наименования отделов. H5 - наименование отдела, данные по которому необходимо просуммировать.
$C$2:$C$50 - диапазон с суммами.
Разберем логику, т.к. многим она будет совершенно не ясна просто при взгляде на данную функцию. Хотя бы потому, что в справке подобное её применение не описывается. Для большей читабельности уменьшим размеры диапазонов:
=СУММПРОИЗВ(( $A$2:$A$5 = $I$3 )*( $B$2:$B$5 = H5 ); $C$2:$C$5 )
Итак, выражение ( $A$2:$A$5 = $I$3 ) и ( $B$2:$B$5 = H5 ) являются логическими и возвращают массивы логических ЛОЖЬ и ИСТИНА. ИСТИНА, если ячейка диапазона $A$2:$A$5 равна значению ячейки $I$3 и ячейка диапазона $B$2:$B$5 равна значению ячейки H5 . Т.е. получается у нас следующее:
=СУММПРОИЗВ(*; $C$2:$C$50 )
Как видно, в первом массиве два совпадения условию, а во втором одно. Далее эти два массива перемножаются(за это отвечает знак умножения(*)). При перемножения происходит неявное преобразование массивов ЛОЖЬ и ИСТИНА в числовые константы 0 и 1 соответственно(*). Как известно, при умножении на нуль получаем нуль. И в результате получается один массив:
=СУММПРОИЗВ(; $C$2:$C$50 )
Далее происходит уже перемножение массива на массив чисел в диапазоне $C$2:$C$50 :
=СУММПРОИЗВ(;)
И как результат получаем 30. Что нам и требовалось - мы получаем лишь ту сумму, которая соответствует критерию. Если сумм, удовлетворяющих критерию будет больше одной, то они будут просуммированы.
Недостатки
В СУММПРОИЗВ невозможно использовать символы подстановки * и ?. Точнее использовать можно, но они будут восприняты не как спец.символы, а как непосредственно звездочка и вопр.знак. Я считаю это существенным минусом. И хотя это можно обойти, использую внутри СУММПРОИЗВ иные функции - все же было бы замечательно, если бы функция каким-то образом могла использовать символы подстановки.
Сумма по нескольким критериям (41,5 KiB, 13 171 скачиваний)
Здравствуйте. Помогите, пожалуйста, со следующей задачей.В диапазоне (А2:А10) - номера деталей. В диапазоне (В2:В10)- соответственно площадь каждой детали. Необходимо подсчитать макросом количество деталей по каждому виду (диапазон С2:С10), чтоб получилась заданная общая сумма площадей деталей в ячейки D2.Одну деталь можно брать несколько раз.
Здравствуйте. Помогите, пожалуйста, со следующей задачей.В диапазоне (А2:А10) - номера деталей. В диапазоне (В2:В10)- соответственно площадь каждой детали. Необходимо подсчитать макросом количество деталей по каждому виду (диапазон С2:С10), чтоб получилась заданная общая сумма площадей деталей в ячейки D2.Одну деталь можно брать несколько раз. Amator
Amator, здравствуйте.
Я Вас правильно понял, Вы хотите чтобы Excel подбирал количество деталей так, чтобы их общая площадь стала равна площади в ячейке D2?
Amator, здравствуйте.
Я Вас правильно понял, Вы хотите чтобы Excel подбирал количество деталей так, чтобы их общая площадь стала равна площади в ячейке D2? Rioran
Я Вас правильно понял, Вы хотите чтобы Excel подбирал количество деталей так, чтобы их общая площадь стала равна площади в ячейке D2? Автор - Rioran
Дата добавления - 12.10.2014 в 14:12
Amator, предлагаю решать эту задачу с помощью уже встроенного в Excel механизма "Поиск решения". Я вижу у Вас 2007-й Excel и Вы можете это запустить. Где найти - посмотрите в интернете запросом "excel поиск решения 2007".
Во вложении пример, как я решал ту же задачу с помощью этого механизма.
В ячейке D3 пишем формулу для подсчёта результирующей площади по всем деталям:
Запускаем "Поиск решения" и далее по списку:
1) Оптимизировать целевую фукнцию $D$3
2) До максимум
3) Изменяя ячейки переменных $C$2:$C$10
4) В соответствии с ограничением: $C$2:$C$10 >= 0 плюс $C$2:$C$10 целое
5) И ещё: $D$3 6) Поиск решения нелинейных задач методом ОПГ
7) Нажать "Найти решение"
Amator, предлагаю решать эту задачу с помощью уже встроенного в Excel механизма "Поиск решения". Я вижу у Вас 2007-й Excel и Вы можете это запустить. Где найти - посмотрите в интернете запросом "excel поиск решения 2007".
Во вложении пример, как я решал ту же задачу с помощью этого механизма.
В ячейке D3 пишем формулу для подсчёта результирующей площади по всем деталям:
Запускаем "Поиск решения" и далее по списку:
1) Оптимизировать целевую фукнцию $D$3
2) До максимум
3) Изменяя ячейки переменных $C$2:$C$10
4) В соответствии с ограничением: $C$2:$C$10 >= 0 плюс $C$2:$C$10 целое
5) И ещё: $D$3 6) Поиск решения нелинейных задач методом ОПГ
7) Нажать "Найти решение" Rioran
Во вложении пример, как я решал ту же задачу с помощью этого механизма.
В ячейке D3 пишем формулу для подсчёта результирующей площади по всем деталям:
Запускаем "Поиск решения" и далее по списку:
1) Оптимизировать целевую фукнцию $D$3
2) До максимум
3) Изменяя ячейки переменных $C$2:$C$10
4) В соответствии с ограничением: $C$2:$C$10 >= 0 плюс $C$2:$C$10 целое
5) И ещё: $D$3 6) Поиск решения нелинейных задач методом ОПГ
7) Нажать "Найти решение" Автор - Rioran
Дата добавления - 12.10.2014 в 14:39
Amator, можно. По сути "Поиск Решения" это тоже макрос.
Вы можете описать логику или алгоритм, по которому макрос будет подбирать количество деталей?
Amator, можно. По сути "Поиск Решения" это тоже макрос.
Вы можете описать логику или алгоритм, по которому макрос будет подбирать количество деталей? Rioran
Вы можете описать логику или алгоритм, по которому макрос будет подбирать количество деталей? Автор - Rioran
Дата добавления - 12.10.2014 в 15:19
Посмотрел файл Романа, число 5 там не получается (или я как то не так смотрю?).
По своей постановке это "задача о сдаче" (или одну из разновидностей "задачи о рюкзаке", где каждый предмет можно выбирать несколько раз), достаточно быстро решается динамическим программированием для целочисленных данных.
Есть вопрос, если решений несколько, какое выбирать?
Несколько примеров решений (на самом деле их существенно больше):
=0,64*6+0,58*2
=0,64*4+0,55+0,21*9
=0,64*2+0,55*6+0,21*2
=0,58+0,55+0,48*3+0,24*4+0,21*7
=0,58*6+0,55*2+0,21*2
=0,58*5+0,21*10
=0,58*2+0,55*3+0,24*3+0,21*7
=0,55+0,44*5+0,24*5+0,21*5
=0,55+0,38*5+0,33*7+0,24
=0,55*3+0,48*3+0,44+0,33+0,24*3+0,21*2
=0,48*7+0,44+0,24*5
=0,44+0,38*6+0,33*4+0,24*4
=0,44+0,38*12
=0,44*7+0,24*8
=0,44*5+0,38*2+0,33*4+0,24*3
=0,38+0,33*14
=0,64+0,55+0,44*3+0,33*2+0,24*5+0,21*3
=0,64+0,55*3+0,48+0,38*2+0,33+0,24*3+0,21*2
=0,64+0,55*3+0,48*2+0,38*2+0,33+0,24+0,21*2
=0,64+0,55*3+0,44+0,38+0,33+0,24*3+0,21*4
=0,64+0,55*2+0,48*2+0,38+0,33+0,24*4+0,21*3
=0,64+0,48*3+0,38*2+0,33*3+0,24*4+0,21
=0,64*3+0,55+0,44+0,38+0,33+0,24*4+0,21*2
=0,64*3+0,55*2+0,44*2+0,38+0,24*3
=0,64*2+0,55+0,48*2+0,38+0,33*2+0,24*4+0,21
=0,64*2+0,55+0,44+0,38*3+0,33*2+0,24*3+0,21
=0,64*2+0,55+0,44*2+0,38*2+0,33*2+0,24+0,21*3
=0,64*2+0,55*2+0,48+0,38*2+0,33*2+0,24*3
=0,64*2+0,55*2+0,48+0,38*2+0,24*4+0,21*2
=0,64*2+0,55*2+0,48*2+0,38*2+0,24*2+0,21*2
=0,64*2+0,55*2+0,38*2+0,33*3+0,24+0,21*3
=0,64*2+0,48+0,38*3+0,33*3+0,24*2+0,21*3
=0,64*2+0,48*4+0,33*2+0,24*3+0,21*2
=0,64*2+0,48*3+0,38*3+0,24*3+0,21*2
=0,58+0,55+0,44*2+0,38+0,33*4+0,24+0,21*5
=0,58+0,55+0,44*2+0,38+0,33*2+0,24*2+0,21*7
=0,58+0,55*4+0,44*2+0,38+0,33+0,21*3
=0,58+0,55*3+0,44+0,38+0,33*2+0,24+0,21*5
=0,58+0,55*3+0,44*2+0,38*3+0,33+0,21*2
=0,58+0,55*2+0,44+0,38*3+0,33*2+0,24+0,21*4
=0,58+0,55*2+0,44+0,38*3+0,24*2+0,21*6
=0,58+0,55*2+0,44*3+0,38+0,33*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33+0,24*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33*3+0,24*2+0,21
=0,58+0,44*5+0,33*4+0,24*2+0,21*2
=0,58+0,44*5+0,33*2+0,24*3+0,21*4
=0,58+0,44*2+0,38*3+0,33*2+0,24*2+0,21*6
=0,58*5+0,44*3+0,33+0,24+0,21
=0,58*4+0,44*5+0,24*2
=0,58*4+0,44*2+0,33+0,21*7
=0,58*4+0,44*2+0,33*2+0,24*3+0,21*2
=0,58*4+0,44*2+0,24*4+0,21*4
=0,58*3+0,55*2+0,44+0,38*2+0,33+0,21*3
=0,58*3+0,55*2+0,44*2+0,38+0,24*2+0,21*2
=0,58*3+0,44+0,33*6+0,21*4
=0,58*3+0,44*4+0,33*2+0,21*4
=0,58*2+0,55+0,44*3+0,38+0,33*2+0,24*3+0,21
=0,58*2+0,55+0,44*2+0,38*2+0,33+0,24*2+0,21*4
=0,58*2+0,55+0,44*2+0,38*2+0,33*3+0,24+0,21*2
=0,58*2+0,55*3+0,44+0,38*2+0,33+0,24+0,21*2
=0,58*2+0,55*3+0,44*3+0,24+0,21*3
=0,58*2+0,55*3+0,44*2+0,38+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33+0,24*4+0,21*3
=0,58*2+0,55*2+0,44+0,38+0,33*3+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33*2+0,21*6
=0,58*2+0,55*2+0,44+0,38+0,24+0,21*8
=0,58*2+0,55*2+0,44*3+0,38*2+0,33*2
=0,58*2+0,55*2+0,44*3+0,38*2+0,24+0,21*2
=0,58*2+0,55*2+0,44*2+0,33+0,24*2+0,21*5
=0,58*2+0,55*2+0,44*2+0,33*3+0,24+0,21*3
=0,58*2+0,55*2+0,38*2+0,33*4+0,24+0,21*2
=0,58*2+0,55*2+0,38*2+0,33*2+0,24*2+0,21*4
=0,58*2+0,44+0,38*2+0,33*2+0,24*3+0,21*6
=0,58*2+0,44*3+0,33*3+0,24*2+0,21*5
=0,58*2+0,44*2+0,38+0,33*3+0,24*4+0,21*3
=0,55+0,48*2+0,38*2+0,33*4+0,24*5+0,21
=0,55+0,44*2+0,38*3+0,33*2+0,24*3+0,21*5
=0,55*3+0,44*2+0,38*2+0,33+0,24*4+0,21*2
Посмотрел файл Романа, число 5 там не получается (или я как то не так смотрю?).
По своей постановке это "задача о сдаче" (или одну из разновидностей "задачи о рюкзаке", где каждый предмет можно выбирать несколько раз), достаточно быстро решается динамическим программированием для целочисленных данных.
Есть вопрос, если решений несколько, какое выбирать?
Несколько примеров решений (на самом деле их существенно больше):
=0,64*6+0,58*2
=0,64*4+0,55+0,21*9
=0,64*2+0,55*6+0,21*2
=0,58+0,55+0,48*3+0,24*4+0,21*7
=0,58*6+0,55*2+0,21*2
=0,58*5+0,21*10
=0,58*2+0,55*3+0,24*3+0,21*7
=0,55+0,44*5+0,24*5+0,21*5
=0,55+0,38*5+0,33*7+0,24
=0,55*3+0,48*3+0,44+0,33+0,24*3+0,21*2
=0,48*7+0,44+0,24*5
=0,44+0,38*6+0,33*4+0,24*4
=0,44+0,38*12
=0,44*7+0,24*8
=0,44*5+0,38*2+0,33*4+0,24*3
=0,38+0,33*14
=0,64+0,55+0,44*3+0,33*2+0,24*5+0,21*3
=0,64+0,55*3+0,48+0,38*2+0,33+0,24*3+0,21*2
=0,64+0,55*3+0,48*2+0,38*2+0,33+0,24+0,21*2
=0,64+0,55*3+0,44+0,38+0,33+0,24*3+0,21*4
=0,64+0,55*2+0,48*2+0,38+0,33+0,24*4+0,21*3
=0,64+0,48*3+0,38*2+0,33*3+0,24*4+0,21
=0,64*3+0,55+0,44+0,38+0,33+0,24*4+0,21*2
=0,64*3+0,55*2+0,44*2+0,38+0,24*3
=0,64*2+0,55+0,48*2+0,38+0,33*2+0,24*4+0,21
=0,64*2+0,55+0,44+0,38*3+0,33*2+0,24*3+0,21
=0,64*2+0,55+0,44*2+0,38*2+0,33*2+0,24+0,21*3
=0,64*2+0,55*2+0,48+0,38*2+0,33*2+0,24*3
=0,64*2+0,55*2+0,48+0,38*2+0,24*4+0,21*2
=0,64*2+0,55*2+0,48*2+0,38*2+0,24*2+0,21*2
=0,64*2+0,55*2+0,38*2+0,33*3+0,24+0,21*3
=0,64*2+0,48+0,38*3+0,33*3+0,24*2+0,21*3
=0,64*2+0,48*4+0,33*2+0,24*3+0,21*2
=0,64*2+0,48*3+0,38*3+0,24*3+0,21*2
=0,58+0,55+0,44*2+0,38+0,33*4+0,24+0,21*5
=0,58+0,55+0,44*2+0,38+0,33*2+0,24*2+0,21*7
=0,58+0,55*4+0,44*2+0,38+0,33+0,21*3
=0,58+0,55*3+0,44+0,38+0,33*2+0,24+0,21*5
=0,58+0,55*3+0,44*2+0,38*3+0,33+0,21*2
=0,58+0,55*2+0,44+0,38*3+0,33*2+0,24+0,21*4
=0,58+0,55*2+0,44+0,38*3+0,24*2+0,21*6
=0,58+0,55*2+0,44*3+0,38+0,33*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33+0,24*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33*3+0,24*2+0,21
=0,58+0,44*5+0,33*4+0,24*2+0,21*2
=0,58+0,44*5+0,33*2+0,24*3+0,21*4
=0,58+0,44*2+0,38*3+0,33*2+0,24*2+0,21*6
=0,58*5+0,44*3+0,33+0,24+0,21
=0,58*4+0,44*5+0,24*2
=0,58*4+0,44*2+0,33+0,21*7
=0,58*4+0,44*2+0,33*2+0,24*3+0,21*2
=0,58*4+0,44*2+0,24*4+0,21*4
=0,58*3+0,55*2+0,44+0,38*2+0,33+0,21*3
=0,58*3+0,55*2+0,44*2+0,38+0,24*2+0,21*2
=0,58*3+0,44+0,33*6+0,21*4
=0,58*3+0,44*4+0,33*2+0,21*4
=0,58*2+0,55+0,44*3+0,38+0,33*2+0,24*3+0,21
=0,58*2+0,55+0,44*2+0,38*2+0,33+0,24*2+0,21*4
=0,58*2+0,55+0,44*2+0,38*2+0,33*3+0,24+0,21*2
=0,58*2+0,55*3+0,44+0,38*2+0,33+0,24+0,21*2
=0,58*2+0,55*3+0,44*3+0,24+0,21*3
=0,58*2+0,55*3+0,44*2+0,38+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33+0,24*4+0,21*3
=0,58*2+0,55*2+0,44+0,38+0,33*3+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33*2+0,21*6
=0,58*2+0,55*2+0,44+0,38+0,24+0,21*8
=0,58*2+0,55*2+0,44*3+0,38*2+0,33*2
=0,58*2+0,55*2+0,44*3+0,38*2+0,24+0,21*2
=0,58*2+0,55*2+0,44*2+0,33+0,24*2+0,21*5
=0,58*2+0,55*2+0,44*2+0,33*3+0,24+0,21*3
=0,58*2+0,55*2+0,38*2+0,33*4+0,24+0,21*2
=0,58*2+0,55*2+0,38*2+0,33*2+0,24*2+0,21*4
=0,58*2+0,44+0,38*2+0,33*2+0,24*3+0,21*6
=0,58*2+0,44*3+0,33*3+0,24*2+0,21*5
=0,58*2+0,44*2+0,38+0,33*3+0,24*4+0,21*3
=0,55+0,48*2+0,38*2+0,33*4+0,24*5+0,21
=0,55+0,44*2+0,38*3+0,33*2+0,24*3+0,21*5
=0,55*3+0,44*2+0,38*2+0,33+0,24*4+0,21*2
Есть вопрос, если решений несколько, какое выбирать?
Несколько примеров решений (на самом деле их существенно больше):
=0,64*6+0,58*2
=0,64*4+0,55+0,21*9
=0,64*2+0,55*6+0,21*2
=0,58+0,55+0,48*3+0,24*4+0,21*7
=0,58*6+0,55*2+0,21*2
=0,58*5+0,21*10
=0,58*2+0,55*3+0,24*3+0,21*7
=0,55+0,44*5+0,24*5+0,21*5
=0,55+0,38*5+0,33*7+0,24
=0,55*3+0,48*3+0,44+0,33+0,24*3+0,21*2
=0,48*7+0,44+0,24*5
=0,44+0,38*6+0,33*4+0,24*4
=0,44+0,38*12
=0,44*7+0,24*8
=0,44*5+0,38*2+0,33*4+0,24*3
=0,38+0,33*14
=0,64+0,55+0,44*3+0,33*2+0,24*5+0,21*3
=0,64+0,55*3+0,48+0,38*2+0,33+0,24*3+0,21*2
=0,64+0,55*3+0,48*2+0,38*2+0,33+0,24+0,21*2
=0,64+0,55*3+0,44+0,38+0,33+0,24*3+0,21*4
=0,64+0,55*2+0,48*2+0,38+0,33+0,24*4+0,21*3
=0,64+0,48*3+0,38*2+0,33*3+0,24*4+0,21
=0,64*3+0,55+0,44+0,38+0,33+0,24*4+0,21*2
=0,64*3+0,55*2+0,44*2+0,38+0,24*3
=0,64*2+0,55+0,48*2+0,38+0,33*2+0,24*4+0,21
=0,64*2+0,55+0,44+0,38*3+0,33*2+0,24*3+0,21
=0,64*2+0,55+0,44*2+0,38*2+0,33*2+0,24+0,21*3
=0,64*2+0,55*2+0,48+0,38*2+0,33*2+0,24*3
=0,64*2+0,55*2+0,48+0,38*2+0,24*4+0,21*2
=0,64*2+0,55*2+0,48*2+0,38*2+0,24*2+0,21*2
=0,64*2+0,55*2+0,38*2+0,33*3+0,24+0,21*3
=0,64*2+0,48+0,38*3+0,33*3+0,24*2+0,21*3
=0,64*2+0,48*4+0,33*2+0,24*3+0,21*2
=0,64*2+0,48*3+0,38*3+0,24*3+0,21*2
=0,58+0,55+0,44*2+0,38+0,33*4+0,24+0,21*5
=0,58+0,55+0,44*2+0,38+0,33*2+0,24*2+0,21*7
=0,58+0,55*4+0,44*2+0,38+0,33+0,21*3
=0,58+0,55*3+0,44+0,38+0,33*2+0,24+0,21*5
=0,58+0,55*3+0,44*2+0,38*3+0,33+0,21*2
=0,58+0,55*2+0,44+0,38*3+0,33*2+0,24+0,21*4
=0,58+0,55*2+0,44+0,38*3+0,24*2+0,21*6
=0,58+0,55*2+0,44*3+0,38+0,33*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33+0,24*3+0,21*3
=0,58+0,55*2+0,44*2+0,38*2+0,33*3+0,24*2+0,21
=0,58+0,44*5+0,33*4+0,24*2+0,21*2
=0,58+0,44*5+0,33*2+0,24*3+0,21*4
=0,58+0,44*2+0,38*3+0,33*2+0,24*2+0,21*6
=0,58*5+0,44*3+0,33+0,24+0,21
=0,58*4+0,44*5+0,24*2
=0,58*4+0,44*2+0,33+0,21*7
=0,58*4+0,44*2+0,33*2+0,24*3+0,21*2
=0,58*4+0,44*2+0,24*4+0,21*4
=0,58*3+0,55*2+0,44+0,38*2+0,33+0,21*3
=0,58*3+0,55*2+0,44*2+0,38+0,24*2+0,21*2
=0,58*3+0,44+0,33*6+0,21*4
=0,58*3+0,44*4+0,33*2+0,21*4
=0,58*2+0,55+0,44*3+0,38+0,33*2+0,24*3+0,21
=0,58*2+0,55+0,44*2+0,38*2+0,33+0,24*2+0,21*4
=0,58*2+0,55+0,44*2+0,38*2+0,33*3+0,24+0,21*2
=0,58*2+0,55*3+0,44+0,38*2+0,33+0,24+0,21*2
=0,58*2+0,55*3+0,44*3+0,24+0,21*3
=0,58*2+0,55*3+0,44*2+0,38+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33+0,24*4+0,21*3
=0,58*2+0,55*2+0,44+0,38+0,33*3+0,24*3+0,21
=0,58*2+0,55*2+0,44+0,38+0,33*2+0,21*6
=0,58*2+0,55*2+0,44+0,38+0,24+0,21*8
=0,58*2+0,55*2+0,44*3+0,38*2+0,33*2
=0,58*2+0,55*2+0,44*3+0,38*2+0,24+0,21*2
=0,58*2+0,55*2+0,44*2+0,33+0,24*2+0,21*5
=0,58*2+0,55*2+0,44*2+0,33*3+0,24+0,21*3
=0,58*2+0,55*2+0,38*2+0,33*4+0,24+0,21*2
=0,58*2+0,55*2+0,38*2+0,33*2+0,24*2+0,21*4
=0,58*2+0,44+0,38*2+0,33*2+0,24*3+0,21*6
=0,58*2+0,44*3+0,33*3+0,24*2+0,21*5
=0,58*2+0,44*2+0,38+0,33*3+0,24*4+0,21*3
=0,55+0,48*2+0,38*2+0,33*4+0,24*5+0,21
=0,55+0,44*2+0,38*3+0,33*2+0,24*3+0,21*5
=0,55*3+0,44*2+0,38*2+0,33+0,24*4+0,21*2
Читайте также: