【发布时间】:2019-03-06 02:12:52
【问题描述】:
我在一次求职面试中被问到以下问题:
给定如下的累进所得税制度:
高达10000按10%征税
10001到50000按20%征税
50001及以上按30%征税
编写一个程序来计算给定收入的税收。
例子:
对 15000 征税将是(5000 的 20% + 10000 的 10%)= 2000
60000 的税收为(10000 的 30% + 40000 的 20% + 10000 的 10%)= 12000
我想出了以下伪代码:
list = (
(1, 10000, 0.1)
(10001, 50000, 0.2)
(50001, infinity, 0.3)
)
taxableIncome = income
taxes = 0
while taxableIncome > 0
find e in list such that taxableIncome is in range [e[1], e[2]]
taxes += taxableIncome - e[1] + 1
taxableIncome = e[1] - 1
return taxes
上述方法有效,但在最坏的情况下,列表中的项目数需要二次时间。考虑收入 = 60000 的情况;代码循环 3 次,每次都可能扫描整个列表。
有没有更快的方法来确定收入属于哪个范围? This question 有一些 Python 解决方案,但我对通用算法解决方案感兴趣,而不是库。
【问题讨论】:
-
您应该先预先计算括号开头以下金额的税金,因为它是恒定的。
-
@MarkRansom 我不明白你指的是什么括号。一旦找到合适的支架,剩下的问题就几乎是微不足道的了。问题是,如何有效地找到括号?
-
他们的这种伪代码语言中没有
if语句吗?只有 3 个括号,其他任何东西都将是矫枉过正。 -
:) 当然任何高级编程语言都支持
if,但我被要求使代码易于扩展。这是有道理的,因为没有人会根据他们编写两个if和一个else语句的能力来雇用开发人员。 -
这取决于目标是可读性、可扩展性还是效率。对于您给出的案例,
if语句在可读性和效率方面都胜出。除非您事先不知道括号的数量,否则另一种方法会更好。
标签: algorithm data-structures range