Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Заблокирован

Максимальное число писем при разделении труда

30.09.2016, 10:20. Показов 1516. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите, пожалуйста, с вариантами решения задачи для детей.

Условия:
Маша и Коля занимаются рассылкой рекламных сообщений. Для этого они разделяют производственный процесс на две операции: написание текста письма(Q1) и подпись конверта(Q2). Их временные затраты приведены в таблице.
Таблица:
Затраты времени на исполнение, мин.
______Q1__ Q2
Маша__ 2___ 3
Коля___ 4___ 5


Определить максимальное количество писем, которое они смогут разослать в течение 8 часов работы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2016, 10:20
Ответы с готовыми решениями:

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На...

Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле
У пети имеется игровое поле размером 3х3, заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На...

Написать программу, которая определяет максимальное чётное число, при котором сумма последовательности не превышает 60. Первое число - 6
Написать программу, которая определяет максимальное чётное число, при котором сумма последовательности не превышает 60. Первое число - 6.

12
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
30.09.2016, 11:36
Так:

Haskell
1
maximum [(480-x1) `div` 3 + (480-x2) `div` 5 | x1<-[2,4..480],x2<-[4,8..480],(x1 `div` 2 + x2 `div` 4)>=(480-x1) `div` 3 +(480-x2) `div` 5]
У меня получилось 153 письма.
2
Заблокирован
30.09.2016, 12:20  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
У меня получилось 153 письма.
Catstail!
Спасибо за почин!

Похоже, Вы тоже не дружите с математикой. Наверно без программирования не решить.

Сама задача отсюда: Микроэкономика. Практикум. Учебное пособие. Малкина М.Ю. 2015

1) Если прикинуть бегло, учитывая косорукость Коли (медлительность):
480/4 = 120 писем (только пишет письма, не подписывая адрес).
Далее Маша-рукодельница подписывает адреса:
120 * 3 = 360 минут
Остальное время Маши:
(480 - 360)/(2 + 3) = 24 письма.
Итого: 120 + 24 = 144 письма.

2) А если так…
Маша: 2 * 150 = 300 минут
Коля: 480/5 = 116 писем
Опять Маша: (150 – 116) * 3 = 34 * 3 = 102 минуты
И ещё Маша: (480 – 300 – 102)/(2 + 3) = 15,6 = 15 писем
Итого: 150 + 15 = 165 писем. Как-то так.

Добавлено через 14 минут
Прошу прощения!
Считал в уме, ленюсь — грубые ошибки:
Маша: 2 * 150 = 300 минут
Коля: 480/5 = 96 писем
Опять Маша: (150 – 96) * 3 = 54 * 3 = 162 минуты
И ещё Маша: (480 – 300 – 162)/(2 + 3) = 18/5 = 3,6 = 3 письма
Итого: 150 + 3 = 153 письма. Совпали результаты.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
30.09.2016, 12:28
Лучший ответ Сообщение было отмечено balky02 как решение

Решение

Мое решение: x1 - время, потраченное Машей на написание; (480-x1) - на конверты. Соответственно, x2 - время, потраченное Колей на написание; (480-x2) - на конверты. Теперь Маша с Колей подготовят x1/2+x1/4 писем, и успеют надписать (480-x1)/3 + (480-x2)/5 конвертов. Нужно потребовать, чтобы число подписанных конвертов было больше или равно числу писем, затем найти, при каких x1 и x2 число писем будет максимально. Это и сделано. А вот то, что у тебя под N2, я не понимаю. Распиши-ка подробнее.

Вот на всякий случай уточнение:

Haskell
1
2
3
4
5
6
7
Prelude> let l = [(x1,x2,(480-x1) `div` 3 + (480-x2) `div` 5) | x1<-[2,4..480],x2<-[4,8..480],(x1 `div` 2 + x2 `div` 4)>=(480-x1) `div` 3 +(480-x2) `div` 5] 
(0.00 secs, 1556068 bytes)
Prelude> maximum [(480-x1) `div` 3 + (480-x2) `div` 5 | x1<-[2,4..480],x2<-[4,8..480],(x1 `div` 2 + x2 `div` 4)>=(480-x1) `div` 3 +(480-x2) `div` 5] 
153
(0.20 secs, 17994344 bytes)
Prelude> filter (\ (x,y,z) -> z==153) l
[(294,24,153),(296,20,153),(300,12,153),(302,8,153),(304,4,153),(306,4,153)]
Первое число в тройках - это x1, второе - x2.

Добавлено через 58 секунд
Цитата Сообщение от balky02 Посмотреть сообщение
Совпали результаты.
- и кто здесь "не дружит с математикой"?
0
Заблокирован
30.09.2016, 12:55  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
и кто здесь "не дружит с математикой"?
Catstail!
Получил шок (нокаут) от первого впечатления, картинка ниже.
Миниатюры
Максимальное число писем при разделении труда  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
30.09.2016, 14:18
balky02, и что? Ошибки в программах - обычное дело. От ошибок не нужно умирать, их нужно исправлять - и только. Даже великому Эйлеру случалось ошибаться, а уж он-то с математикой "дружил" не так, как мы ничтожные.
0
Заблокирован
30.09.2016, 22:38  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
balky02, и что?
Catstail!
Помогите, пожалуйста, никак не могу ввести исходные данные.

Ерунда получается. Ниже одна из попыток.
Haskell
1
2
import
let l = [(x1,x2,(480-x1) `div` 3 + (480-x2) `div` 5) | x1<-[2,4..480],x2<-[4,8..480],(x1 `div` 2 + x2 `div` 4)>=(480-x1) `div` 3 +(480-x2) `div` 5]
Мы, с HASKELL, не можем найти взаимопонимания:
Haskell
1
2
3
4
5
6
7
8
GHCi, version 8.0.1: [url]http://www.haskell.org/ghc/[/url]  :? for help
Prelude> :cd C:\Users\admin\Documents\MyWinHugs
Prelude> :load "MashaKolya.hs"
 
MashaKolya.hs:2:1: error:
    parse error (possibly incorrect indentation or mismatched brackets)
Failed, modules loaded: none.
Prelude>
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
30.09.2016, 23:27
Лучший ответ Сообщение было отмечено balky02 как решение

Решение

Вот код:

Haskell
1
2
3
4
5
6
task = filter (\ (x,y,z) -> z==m) lst
       where lst = [(x1,x2,(480-x1) `div` 3 + (480-x2) `div` 5) | 
                     x1<-[2,4..480],
                     x2<-[4,8..480],
                     (x1 `div` 2 + x2 `div` 4)>=(480-x1) `div` 3 +(480-x2) `div` 5] 
             m   = maximum $ map (\ (x,y,z)->z) lst
Сохраняешь его под именем MashKolya.hs и просто щелкаешь по иконке этого файла в проводнике. Отобразится консоль Haskell. Там вводишь task и Enter:
Миниатюры
Максимальное число писем при разделении труда  
0
Заблокирован
01.10.2016, 17:35  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Там вводишь task и Enter
Catstail! Спасибо за помощь! Всё получилось.
Помогите, пожалуйста — с кодом, ниже.

Условия для усложнённого варианта:
Маша, Коля и Лена занимаются рассылкой рекламных сообщений. Для этого они разделяют производственный процесс на три операции: написание текста письма (Q1), подпись конверта (Q2) и отправка письма (Q3). Их временные затраты приведены в таблице.
Таблица:
Затраты времени на исполнение, мин.
______Q1__ Q2__ Q3
Маша__ 2___ 3___1
Коля___ 4___ 5___2
Лена___ 5___ 7___3


Определить максимальное количество писем, которое они смогут разослать в течении 8 часов, работая втроём.
0
Заблокирован
02.10.2016, 21:54  [ТС]
Цитата Сообщение от balky02 Посмотреть сообщение
для усложнённого варианта
Catstail!
Что, никак не можете найти общий язык с математикой? Да, она такая! Любит абстракцию.

Рассуждаем. Пусть каждый работает сам на себя, тогда максимум:
480/(2 + 3 + 1) + 480/(4 + 5 + 2) + 480/(5 + 7 + 3) = 480/6 + 480/11 + 480/15 = 80 + 43,6 + 32 = 155,6

Опять упростим условия:
Маша, Коля и Лена занимаются рассылкой рекламных сообщений. Для этого они разделяют производственный процесс на три операции: написание текста письма (Q1), подпись конверта (Q2) и отправка письма (Q3). Их временные затраты приведены в таблице.
Таблица:
Затраты времени на исполнение, мин.
______Q1__ Q2__ Q3
Маша__ 2___ 3___1
Коля___ 4___ 5___2
Лена___ 5___ 7___3
Предполагаем: вся отправка писем пойдёт через Машу, она самая быстрая — одна минута на письмо! В дальнейшем просто уменьшим её время: 480 – 160 = 320, где 160 — время на отправку.

Вначале рассчитаем:
______Q1__ Q2
Маша__ 2___ 3
Коля___ 4___ 5
Лена___ 5___ 7

Код, предупреждаю: мой Haskell сильно напрягается — считал около двух (!) минут. Ослаб он.
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(\ (x,y,k,z) -> z==m) lst
       where lst = [(x1,x2,x3,(480-x1) `div` 3 + (480-x2) `div` 5 + (480-x3) `div` 7) | 
                     x1<-[2,4..480],
                     x2<-[4,8..480],
                     x3<-[5,10..480],
                     (x1 `div` 2 + x2 `div` 4 + x3 `div` 5)>=(480-x1) `div` 3 +(480-x2) `div` 5 +(480-x3) `div` 7] 
             m   = maximum $ map (\ (x,y,k,z)->z) lst
 
GHCi, version 8.0.1: [url]http://www.haskell.org/ghc/[/url]  :? for help
Prelude> :load "MashaKolyaLena.hs"
[1 of 1] Compiling Main             ( MashaKolyaLena.hs, interpreted )
 
MashaKolyaLena.hs:5:1: warning: [-Wtabs]
    Tab character found here, and in four further locations.
    Please use spaces instead.
Ok, modules loaded: Main.
*Main> task
[(348,4,95,194),(354,4,80,194),(354,20,60,194),(360,4,65,194),(360,8,60,194),(360,20,45,194),(362,4,60,194),(366,4,50,194),(366,8,45,194),(366,20,30,194),(366,24,25,194),(368,4,45,194),(368,20,25,194),(372,4,35,194),(372,8,30,194),(372,12,25,194),(372,20,15,194),(372,24,10,194),(374,4,30,194),(374,8,25,194),(374,20,10,194),(376,4,25,194),(378,4,20,194),(378,4,25,194),(378,8,15,194),(378,12,10,194),(380,4,15,194),(380,8,10,194),(382,4,10,194),(384,4,5,194),(384,4,10,194)]
*Main>
А теперь так, через бедро с захватом:
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(\ (x,y,k,z) -> z==m) lst
       where lst = [(x1,x2,x3,(320-x1) `div` 3 + (480-x2) `div` 5 + (480-x3) `div` 7) | 
                     x1<-[2,4..320],
                     x2<-[4,8..480],
                     x3<-[5,10..480],
                     (x1 `div` 2 + x2 `div` 4 + x3 `div` 5)>=(320-x1) `div` 3 +(480-x2) `div` 5 +(480-x3) `div` 7] 
             m   = maximum $ map (\ (x,y,k,z)->z) lst
 
Prelude> :load "MashaKolyaLena320.hs"
 
MashaKolyaLena320.hs:2:8: error: parse error on input ‘where[1 of 1] Compiling Main             ( MashaKolyaLena320.hs, interpreted )
Failed, modules loaded: none.
Prelude>
Жалко, мой Haskell опять в бутылку полез. Ничего не понимает. Что же делать?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
02.10.2016, 23:34
Цитата Сообщение от balky02 Посмотреть сообщение
Что, никак не можете найти общий язык с математикой? Да, она такая! Любит абстракцию.
- и где же тут абстракция?

Добавлено через 3 минуты
Цитата Сообщение от balky02 Посмотреть сообщение
предупреждаю: мой Haskell сильно напрягается — считал около двух (!) минут. Ослаб он.
- так это неудивительно. Ведь массив точек стал трехмерным и увеличился примерно в 100 раз. Вот перебор и начал тормозить...

Добавлено через 7 минут
Haskell
1
2
3
4
5
6
7
task = filter (\ (x,y,k,z) -> z==m) lst
         where lst = [(x1,x2,x3,(320-x1) `div` 3 + (480-x2) `div` 5 + (480-x3) `div` 7) | 
                     x1<-[2,4..320],
                     x2<-[4,8..480],
                     x3<-[5,10..480],
                     (x1 `div` 2 + x2 `div` 4 + x3 `div` 5)>=(320-x1) `div` 3 +(480-x2) `div` 5 +(480-x3) `div` 7] 
               m   = maximum $ map (\ (x,y,k,z)->z) lst
Запускаю, и за 30 сек получаю:

Code
1
2
*Main> task
[(284,4,95,162),(290,4,80,162),(290,20,60,162),(296,4,65,162),(296,8,60,162),(296,20,45,162),(298,4,60,162),(302,4,50,162),(302,8,45,162),(302,20,30,162),(302,24,25,162),(304,4,45,162),(304,20,25,162),(308,4,35,162),(308,8,30,162),(308,12,25,162),(308,20,15,162),(308,24,10,162),(310,4,30,162),(310,8,25,162),(310,20,10,162),(312,4,25,162),(314,4,20,162),(314,4,25,162),(314,8,15,162),(314,12,10,162),(316,4,15,162),(316,8,10,162),(318,4,10,162),(320,4,5,162),(320,4,10,162)]
1
Заблокирован
03.10.2016, 01:44  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Запускаю, и за 30 сек получаю
Catstail! Спасибо!
Предполагаем: вся отправка писем пойдёт через Машу, она самая быстрая — одна минута на письмо! В дальнейшем просто уменьшим её время: 480 – 162 = 318, где 162 — время на отправку.

Последовательно путём подбора, через 319 минут, выхожу на баланс: 162 = 162
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
task = filter (\ (x,y,k,z) -> z==m) lst
         where lst = [(x1,x2,x3,(318-x1) `div` 3 + (480-x2) `div` 5 + (480-x3) `div` 7) | 
                     x1<-[2,4..318],
                     x2<-[4,8..480],
                     x3<-[5,10..480],
                     (x1 `div` 2 + x2 `div` 4 + x3 `div` 5)>=(318-x1) `div` 3 +(480-x2) `div` 5 +(480-x3) `div` 7] 
               m   = maximum $ map (\ (x,y,k,z)->z) lst
 
Prelude> :load "MKL320.hs"
[1 of 1] Compiling Main             ( MKL320.hs, interpreted )
Ok, modules loaded: Main.
*Main> task
[(284,4,95,162),(290,4,80,162),(290,20,60,162),(296,4,65,162),(296,8,60,162),(296,20,45,162),(298,4,60,162),(302,4,50,162),(302,8,45,162),(302,20,30,162),(302,24,25,162),(304,4,45,162),(304,20,25,162),(308,4,35,162),(308,8,30,162),(308,12,25,162),(308,20,15,162),(308,24,10,162),(310,4,30,162),(310,8,25,162),(310,20,10,162),(312,4,25,162),(314,4,20,162),(314,4,25,162),(314,8,15,162),(314,12,10,162),(316,4,15,162),(316,8,10,162),(318,4,10,162),(320,4,5,162),(320,4,10,162)]
*Main> :cd C:\Users\admin\Documents\MyWinHugs
Warning: changing directory causes all loaded modules to be unloaded,
because the search path has changed.
Prelude> :load "MKL320.hs"
[1 of 1] Compiling Main             ( MKL320.hs, interpreted )
Ok, modules loaded: Main.
*Main> task
[(298,4,60,162),(304,4,45,162),(304,20,25,162),(310,4,30,162),(310,8,25,162),(310,20,10,162),(312,4,25,162),(316,4,15,162),(316,8,10,162),(318,4,10,162)]
*Main> :cd C:\Users\admin\Documents\MyWinHugs
Warning: changing directory causes all loaded modules to be unloaded,
because the search path has changed.
Prelude> :load "MKL320.hs"
[1 of 1] Compiling Main             ( MKL320.hs, interpreted )
Ok, modules loaded: Main.
*Main> task
[(312,4,25,162),(318,4,10,162)]
*Main>
1
Заблокирован
04.10.2016, 23:32  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Распиши-ка подробнее
Catstail!
Помогите, пожалуйста, с переводом кода Python на Haskell.

Наверно у меня слабенький процессор — пытался 10 раз подсчитать на PyScripter в объёме для 480 минут . Неудачно, несмотря на ожидания по 10-15 минут! Каждый раз системный сбой: "программа PyScripter прекращает работу".

Поэтому расчёт делаю только на 60 минут, результат сразу (без ожидания) — картинка ниже.

Код (для 60 минут):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#-*-coding:cp1251-*-
t = 60
q1 = [2, 4, 5]
q2 = [3, 5, 7]
q3 = [1, 2, 3]
 
res = []
for x in range(q3[0], t+1, q3[0]):
    try:
        m = max( (x//q3[0], (t-x-t0)//q2[0] + (t-t1)//q2[1] + (t-t2)//q2[2], t0, t1, t2, x)
                        for t1 in range(q1[1], t+1, q1[1])
                        for t2 in range(q1[2], t+1, q1[2])
                        for t0 in range(0, t-x+1, q1[0])
                        if  t0//q1[0] + t1//q1[1] + t2//q1[2] >= (t-x-t0)//q2[0] + (t-t1)//q2[1] + (t-t2)//q2[2] >= x//q3[0]
        )
        res.append(m)
    except ValueError:
        # print(x)
        pass
 
# print(res)
m = max(res)
print(*(it for it in res if it[0] == m[0]))
Ответ:
Python
1
2
3
4
*** Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32. ***
 
(20, 20, 34, 4, 10, 20)
>>>
Интерпретация чисел:
(20, 20, 34, 4, 10, 20)
# 20 — искомая величина (количество отправленных писем);
# 20 — количество написанных писем, включая адреса;
# 34 — время затраченное Машей на написание писем;
# 4 — время затраченное Колей на написание писем, остальное написание адресов;
# 10 — время затраченное Леной на написание писем, остальное написание адресов;
# 20 — время затраченное Машей на отправку писем.
Миниатюры
Максимальное число писем при разделении труда  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2016, 23:32
Помогаю со студенческими работами здесь

Ошибка при разделении массива на части
Доброго времени суток. После деления массива на части, не получается поместить части массива в разные div-ы. Ошибка во втором цикле, не...

Кодировка при разделении строки на массив
$name = str_split($Responsible); $second_name = str_split($Responsible); Разделяю две строки, когда пытаюсь вывести первый символ: ...

Ошибка при разделении тома Acronis - ом
Немогу разбить диск из-за ошибки еще 2 недели назад вчк було норм.

Split выводит знак enter при разделении
Имеется текст вида: a b c; d f t; d t h; Если делить его с помощью split(';'), то к каждому элементу следующей строки(кроме...

Равномерен ли износ при разделении флешки на разделы?
Добрый день. Такой вопрос: Допустим есть флешка объемом 4 ГБ. Она разделена на 2 логических диска, скажем 3,8 Гб и 0,2 ГБ. Если теперь...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru