Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Заблокирован
1

Наибольшее число табуреток

30.09.2016, 22:31. Показов 1797. Ответов 7
Метки нет (Все метки)

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

Условия:
Вася и Миша занимаются изготовлением табуреток из покупных заготовок. Для этого их производственный процесс — разделён на две операции: сборка (Q1) и покраска (Q2). Их временные затраты приведены в таблице.
Таблица. Затраты времени на исполнение, мин.
______ Q1__ Q2
Вася___ 5___ 7
Миша__ 6___ 9

Определить наибольшее число табуреток, которое они смогут собрать и покрасить за смену (8 часов работы), используя преимущества кооперации.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2016, 22:31
Ответы с готовыми решениями:

Дано натуральное число n>1 Найти наибольшее число k при котором 4^k<n
дано натуральное число m&gt;1.Найти наибольшее число k при котором 4^k&lt;m.Помогите пожалуйста очень...

Найти наибольшее отрицательное число и наименьшее положительное число среди 6 чисел
Даны шесть целых чисел. Найдите наибольшее отрицательное число и наименьшее положительное число...

Задано число. Получить наибольшее(наименьшее) число, записанное теми же цифрами.
Помогите решить эту задачу на Pascal ABC. Заранее спасибо.

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

Выведите число, которое встретилось в последовательности наибольшее число раз (со стеками)
Решение простое, но никак не могу написать с использованием стеков. Помогите, пожалуйста ...

7
563 / 303 / 189
Регистрация: 20.05.2016
Сообщений: 592
01.10.2016, 13:26 2
Лучший ответ Сообщение было отмечено balky02 как решение

Решение

Python
1
2
3
4
5
6
7
8
t = 480
q1 = [5, 6]
q2 = [7, 9]
 
tabourets = max( (t - x0)//q2[0] + (t - x1)//q2[1] for x0 in range(q1[0], t+1, q1[0]) 
                                                   for x1 in range(q1[1], t+1, q1[1]) 
                                                   if (x0//q1[0] + x1//q1[1]) >= ((t-x0)//q2[0] + (t-x1)//q2[1]) )
print(tabourets)
0
Заблокирован
01.10.2016, 17:13  [ТС] 3
Цитата Сообщение от shsv Посмотреть сообщение
print(tabourets)
shsv!
Отлично! Спасибо.

Код, картинка ниже
Python
1
2
3
4
5
6
7
8
9
#-*-coding:cp1251-*-
t = 480
q1 = [5, 6]
q2 = [7, 9]
 
tabourets = max( (t - x0)//q2[0] + (t - x1)//q2[1] for x0 in range(q1[0], t+1, q1[0])
                                                   for x1 in range(q1[1], t+1, q1[1])
                                                   if (x0//q1[0] + x1//q1[1]) >= ((t-x0)//q2[0] + (t-x1)//q2[1]) )
print(tabourets)
Ответ
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. ***
>>> 
73
>>>
shsv! Помогите, пожалуйста, с написанием кода для решения усложнённой задачи, ниже
Условия:
Вася, Миша и Серёжа занимаются изготовлением табуреток из покупных заготовок. Для этого их производственный процесс — разделён на три операции: сборка (Q1), покраска (Q2) и упаковка (Q3). Их временные затраты приведены в таблице.
Таблица. Средние затраты времени на одну табуретку, мин.
________Q1___ Q2___ Q3
Вася_____ 5____ 7____ 3
Миша____6____ 9____ 4
Серёжа____7___10____ 5
Определить наибольшее число табуреток, которое они смогут втроём: собрать, покрасить и упаковать за смену (8 часов работы), используя преимущества кооперации.


Пояснение для других участников, ниже.
В лоб, без кооперации — они могут изготовить готовых табуреток:
480/(5 + 7 + 3) + 480/(6 + 9 + 4) + 480/(7 + 10 + 5) = 480/15 + 480/19 + 480/22 = 32 + 25 + 21 = 78
Но ведь это не предел?
0
Заблокирован
03.10.2016, 02:33  [ТС] 4
Цитата Сообщение от shsv Посмотреть сообщение
t = 480
shsv!
Предполагаем: вся упаковка пойдёт через Васю, он самый быстрый — три минуты на табуретку! В дальнейшем просто уменьшим его время: 480 – 240 = 240, где 240 — общее время на упаковку.
Всё бы хорошо, но не хватает трёх минут. Нет баланса: 80 не равно 81!

Как улучшить результат?

Код (спорный)
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
task = filter (\ (x,y,k,z) -> z==m) lst
         where lst = [(x1,x2,x3,(240-x1) `div` 7 + (480-x2) `div` 9 + (480-x3) `div` 10) | 
                     x1<-[5,10..240],
                     x2<-[6,12..480],
                     x3<-[7,14..480],
                     (x1 `div` 5 + x2 `div` 6 + x3 `div` 7)>=(240-x1) `div` 7 +(480-x2) `div` 9 +(480-x3) `div` 10] 
               m   = maximum $ map (\ (x,y,k,z)->z) lst
 
GHCi, version 8.0.1: [url]http://www.haskell.org/ghc/[/url]  :? for help
Prelude> :cd C:\Users\admin\Documents\MyWinHugs
Warning: changing directory causes all loaded modules to be unloaded,
because the search path has changed.
Prelude> :load "VMS80.hs"
[1 of 1] Compiling Main             ( VMS80.hs, interpreted )
Ok, modules loaded: Main.
*Main> task
[(15,408,70,81),(15,426,49,81),(15,444,28,81),(15,462,7,81),(30,390,70,81),(30,408,49,81),(30,426,28,81),(30,444,7,81)]
*Main>
0
563 / 303 / 189
Регистрация: 20.05.2016
Сообщений: 592
03.10.2016, 18:44 5
Лучший ответ Сообщение было отмечено balky02 как решение

Решение

Не уверен в верности нижеследующего (даже при условии, что Ваша идея полностью ясна мне)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
t = 480
q1 = [5, 6, 7]
q2 = [7, 9, 10]
q3 = [3, 4, 5]
 
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
5
6
7
(80, 81, 30, 444, 7, 240)
# 80  - искомая величина - количество упакованных табуреток
# 81  - количество покрашенных табуреток
# 30  - время затраченное Васей на изготовление
# 444 - время затраченное Мишей на изготовление
# 7   - время затраченное Серёжей на изготовление
# 240 - время затраченное Васей на упаковку табуреток
1
Заблокирован
03.10.2016, 23:32  [ТС] 6
Цитата Сообщение от shsv Посмотреть сообщение
Не уверен в верности
shsv!
Спасибо за оригинальные мысли!

А всё ли правильно в коде? Трижды пытался запустить, каждый раз неудачно.
Пробовал выждать даже полчаса, но толку нет.
PyScripter — зависает и не справляется. Системный сбой. Картинка ниже.
Миниатюры
Наибольшее число табуреток  
0
563 / 303 / 189
Регистрация: 20.05.2016
Сообщений: 592
04.10.2016, 14:02 7
В смысле синтаксиса всё вроде верно, усиленно считает 3-5 минут и выдаёт результат.

(Все оригинальные мысли - Ваши)
1
Заблокирован
04.10.2016, 22:51  [ТС] 8
Цитата Сообщение от shsv Посмотреть сообщение
усиленно считает 3-5 минут и выдаёт результат
shsv!
Всё отлично работает, спасибо!
Наверно у меня слабенький процессор — более восьми (!) считает, картинка ниже.

Сама Ваша идея мне понравилась.

Только надо как-то "разукрупнить объёмы подсчётов". Например, уменьшить объём времени в 10 раз до 48 минут, тогда код срабатывает сразу. По остаткам времени будет возможно синтезировать общую картину, в перспективе.

Код (для 48 минут) — без ожидания:
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 = 48
q1 = [5, 6, 7]
q2 = [7, 9, 10]
q3 = [3, 4, 5]
 
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
>>> 
(8, 8, 10, 30, 7, 24)
>>>
Миниатюры
Наибольшее число табуреток  
0
04.10.2016, 22:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2016, 22:51
Помогаю со студенческими работами здесь

Распечатайте наименьшее число столько раз, сколько наибольшее число
Дайте два числа. Распечатайте наименьшее число столько раз, сколько наибольшее число. например: 2 ...

Дано натуральное число N. Получить наибольшее число вида 4k, меньшее N
Помогите решить, заранее спасибо)) 1. Дано натуральное число N. Получить наибольшее число вида 4k,...

Дано целое число m>1. Получить наибольшее число, при котором (4^k)<m
Помогите пожалуйста с решением этой задачи на c#((((((

Найти число в массиве, которое встречается наибольшее число раз
Дан массив a из n целых чисел. Напишите программу, которая найдет число, которое встречается в...

Выведите число, которое встретилось в последовательности наибольшее число раз
Задача для С++: Дано число n - чётное. Далее идут n натуральных чисел, каждое из которых не...


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

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