1.某机械公司生产两种产品。A的单件利润分别是100元,B的单件利润是150元。 每种产品由三种材料构成,现给出每种材料的库存(库存小于100000),求利润最大的生产方案。输入说明:第一行给出生产每件A产品所需要的三种材料数量;第二行给出生产每件B产品所需要的三种材料数量;第三行给出三种材料的库存数量。输出说明:输出利润最大生产方案所对应的每种产品的生产数量(按照产品A、产品B的顺序)和利润最大值,每个数值间用空格隔开。输入样例:3125223046输出样例:21350。
# 导入线性规划求解库
from scipy.optimize import linprog
# 输入数据
# 每件产品A所需的三种材料数量
a_materials = [3, 1, 2]
# 每件产品B所需的三种材料数量
b_materials = [5, 2, 3]
# 三种材料的库存数量
material_stock = [30, 4, 6]
# 产品A和B的利润
profit = [100, 150]
# 将目标函数的系数取负,因为 linprog 默认求解最小值问题
c = [-profit[0], -profit[1]]
# 不等式约束矩阵,表示材料的使用限制
A = [[a_materials[0], b_materials[0]], # 材料一的约束[a_materials[1], b_materials[1]], # 材料二的约束[a_materials[2], b_materials[2]] # 材料三的约束
]
# 不等式约束向量
b = material_stock
# 变量的取值范围,x >= 0
x_bounds = (0, None)
# 求解线性规划问题
res = linprog(c, A_ub=A, b_ub=b, bounds=[x_bounds, x_bounds], method='highs')
# 输出结果
if res.success:num_A, num_B = res.xmax_profit = -res.funprint(f"最优生产方案:生产产品A的数量为 {int(num_A)},生产产品B的数量为 {int(num_B)}")print(f"最大利润为:{max_profit}")
else:
print("未找到最优解")
(1)输入数据:定义每个产品A和B所需的三种材料数量、材料的库存数量以及产品A和B的利润。
(2)目标函数:linprog默认求解最小化问题,将利润系数取反,求最大化利润。
(3)约束条件:每种材料的使用量不能超过库存量。
(4)求解问题:使用linprog求解最优生产方案。
(5)输出结果:打印最优生产方案和最大利润。
2.输入一个包含N个整数的数组,从中找到连续M个数之积最小的数字组合。输入说明:第一行是两个正整数N(N<200) 和M(M<10);第二行是N个整数(每个数字Ni都是整数,且INil<1000),中间用空格分开。输出说明:最小的M个连续数字积及第一个数在数组中的位置(初始位置按1进行计算)。输入样例:10412345678910输出样例:241。
# 输入处理
n, m = map(int, input().split())
array = list(map(int, input().split()))# 初始化最小乘积和对应的起始位置
min_product = float('inf')
min_index = -1# 遍历数组,找出连续 m 个数的最小乘积
for i in range(n - m + 1):product = 1for j in range(m):product *= array[i + j]if product < min_product:min_product = productmin_index = i + 1 # 转换为从 1 开始计数# 输出结果
print(min_product, min_index)
(1)输入处理:首行输入包含两个正整数 N 和 M,表示数组长度和需要寻找的连续元素个数;第二行输入是包含 N 个整数的数组。
(2)最小乘积计算:通过遍历数组,找出所有长度为 M 的连续子数组,并计算它们的乘积,更新最小乘积及其起始位置。
(3)输出结果:输出最小乘积及其起始位置(位置从 1 开始计数)。
3.输入一个包含N个整数的数组,从中找到连续M个数之和最大的数字组合。输入说明:第一行是两个正整数N(N<200)和M(M<20)第二行是N个整数(每个数字Ni都是整数,且Nil<100000),中间用空格分开输出说明:最大的M个连续数字和及第一个数在数组中的位置(初始位置按1进行计算)。输入样例10412345678910输出样例:347。
# 输入处理
n, m = map(int, input().split())
array = list(map(int, input().split()))# 初始化最大和及其对应的起始位置
max_sum = float('-inf')
max_index = -1# 遍历数组,找出连续 m 个数的最大和
for i in range(n - m + 1):current_sum = sum(array[i:i + m])if current_sum > max_sum:max_sum = current_summax_index = i + 1 # 转换为从 1 开始计数# 输出结果
print(max_sum, max_index)
(1)输入处理:第一行输入包含两个正整数 N 和 M,表示数组长度和需要寻找的连续元素个数;第二行输入是包含 N 个整数的数组。
(2)最大和计算:通过遍历数组找出所有长度为 M 的连续子数组,并计算它们的和,更新最大和及其起始位置。
(3)输出结果:输出最大和及其起始位置(位置从 1 开始计数)。
4.给定两个整数N和M(0<n<m<100000),求n到m中满足如下条件的数字,该数字与相邻的前、后数字之和可以被5整除,比如n=4,m=11时,5、10是满足条件的,而6、7、8、9不满足,4和11因为前、后数字不在1到n中,不参与统计。=""输入说明:两个正整数n和m(n<m<100000)=""输出说明:满足要求的数字,如果有多个满足条件的数字,按出现次序输出前3个,如果不足3个,用-1补充。=""输入样例1:14=100=""输出样例1:15=""20=""25=""输入样例2。
# 输入处理
n, m = map(int, input().split())# 满足条件的数字列表
result = []# 遍历 n 到 m 范围内的所有数字
for i in range(n, m + 1):last_digit = i % 10 # 获取数字的最后一位if last_digit != 0 and i % last_digit == 0 and i % 5 == 0:result.append(i)# 如果找到的数字少于 3 个,使用 -1 填充
while len(result) < 3:result.append(-1)# 输出前 3 个满足条件的数字
print(result[:3])
(1)输入处理:输入两个整数 N 和 M,表示范围 [N, M]。
(2)条件检查:遍历范围内的每个数字,检查最后一位不为 0、该数字能被其最后一位整除、并且能被 5 整除的条件。
(3)输出处理:如果找到的数字少于 3 个,则使用 -1 填充,最后输出前 3 个满足条件的数字。