编写编程摩天轮题目时,通常需要考虑以下几个方面:
题目描述
清晰地描述摩天轮的结构和操作规则。
定义每次轮转的成本(runningCost)和每个座舱的容量。
描述游客到达的时间点和数量。
输入
定义输入数据的格式和类型,例如一个数组,表示每次轮转前到达的游客数量。
输出
确定输出的格式和类型,例如最大利润、最优轮转策略等。
算法设计
设计算法来计算最大利润或最优的轮转策略。
考虑如何通过轮转座舱来最大化收益,同时控制运行成本。
实现
选择合适的编程语言和库来实现算法。
编写代码来控制摩天轮的运行和绘制(如果需要可视化)。
测试
设计测试用例来验证代码的正确性和效率。
题目描述
你正在经营一座摩天轮,该摩天轮共有 4 个座舱,每个座舱最多可以容纳 4 位游客。你可以逆时针轮转座舱,但每次轮转都需要支付一定的运行成本 `runningCost`。摩天轮每次轮转都恰好转动 1/4 周。给定一个长度为 `n` 的数组 `customers`,其中 `customers[i]` 是在第 `i` 次轮转之前到达的新游客的数量。求在不考虑空座舱的情况下,能够获得的最大利润。
输入
`n`:整数,表示轮转的次数。
`customers`:长度为 `n` 的整数数组,表示每次轮转前到达的游客数量。
`boardingCost`:整数,表示每次轮转的成本。
`runningCost`:整数,表示每次轮转的运行成本。
输出
返回一个整数,表示能够获得的最大利润。
示例
示例 1
```
输入:
n = 3
customers = [8, 3, 5]
boardingCost = 5
runningCost = 3
输出:
11
```
示例 2
```
输入:
n = 5
customers = [10, 10, 6, 4, 7]
boardingCost = 3
runningCost = 4
输出:
18
```
提示
在每次轮转时,你需要选择是否将新到达的游客安排入座舱,或者让座舱空着。
你需要计算每次轮转后的总利润,并选择最优的策略来最大化总利润。
参考答案
```python
class Solution:
def minOperationsMaxProfit(self, customers: List[int], boardingCost: int, runningCost: int) -> int:
max_val = 0
max_step = -1
money = 0
wait = 0
i = 0
while i < n:
people = customers[i]
if i == 4:
money += boardingCost * 4
wait -= 4
else:
money += boardingCost * min(people, 4)
wait += max(0, 4 - people)
if money > max_val:
max_val = money
max_step = i + 1
i += 1
return max_step
```
建议
在实现算法时,可以考虑使用动态规划或贪心算法来优化计算过程。
如果需要可视化,可以使用图形库(如 Python 的 `turtle` 库)来绘制摩天轮的运行效果。