现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(a类)、文具(b类)、差旅(c类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。
时间: 2023-03-16 13:47:34 浏览: 112
这道题目需要编写一个程序,能够在一堆发票中找出可以报销的、不超过给定额度的最大报销额。具体要求如下:
1. 可以报销的发票类型包括买图书(a类)、文具(b类)、差旅(c类)。
2. 每张发票的总额不得超过100元。
3. 每张发票上,单项物品的价值不得超过600元。
下面是一个可能的程序实现:
1. 首先,定义一个函数,用于判断一张发票是否可以报销。这个函数需要接收一个发票对象作为参数,然后根据发票类型、总额、单项物品价值等条件进行判断。如果可以报销,返回 True,否则返回 False。
2. 接下来,定义一个函数,用于计算一堆发票中可以报销的最大额度。这个函数需要接收两个参数:一个是发票列表,另一个是给定的报销额度。函数的实现思路如下:
- 首先,对发票列表进行排序,按照总额从大到小的顺序排列。
- 然后,遍历排序后的发票列表,依次判断每张发票是否可以报销。如果可以报销,就将该发票的总额加入到已报销额度中,并将该发票从列表中删除。
- 如果已报销额度超过了给定的报销额度,就停止遍历,返回已报销额度。
- 如果遍历完整个列表后,已报销额度仍然没有超过给定的报销额度,就返回已报销额度。
下面是一个可能的 Python 实现:
```python
def can_reimburse(invoice):
if invoice.type == 'a' and invoice.total <= 100 and invoice.item_value <= 600:
return True
elif invoice.type == 'b' and invoice.total <= 100 and invoice.item_value <= 600:
return True
elif invoice.type == 'c' and invoice.total <= 100:
return True
else:
return False
def max_reimbursement(invoices, limit):
invoices.sort(key=lambda x: x.total, reverse=True)
total =
i =
while i < len(invoices) and total < limit:
if can_reimburse(invoices[i]):
total += invoices[i].total
del invoices[i]
else:
i += 1
return total
```
这个程序中,假设发票对象的属性包括类型(type)、总额(total)、单项物品价值(item_value)等。函数 can_reimburse 判断一张发票是否可以报销,函数 max_reimbursement 计算一堆发票中可以报销的最大额度。