Epic公司面试题:找零算法

4星 · 超过85%的资源 需积分: 50 121 下载量 50 浏览量 更新于2024-07-24 4 收藏 125KB PDF 举报
"这篇资料包含了epic公司的面试题和答案,主要涉及算法设计,特别是找零钱的问题。问题要求编写一个算法,返回10美元、5美元、1美元、25美分、10美分等不同面额的硬币找零。提供的代码示例用C++编写,通过循环计算找零数量并更新剩余找零金额。" 在计算机科学和编程领域,尤其是在面试场景中,设计有效的算法是至关重要的。这个问题是一个经典的找零钱问题,属于动态规划或贪心算法范畴。下面将详细解释这个问题和给出的解决方案: 1. **问题定义**:给定商品成本(cost)和支付金额(cash),计算找零(change)并以指定面额的货币返回找零的最小硬币组合。面额数组为`doubledeno`,包含10美元、5美元、1美元、25美分和10美分。 2. **解决方案概述**:首先计算出找零金额,然后从最大面额开始遍历,尽可能多地使用大面额的硬币,因为这样可以减少硬币的总数。每次迭代时,我们计算可以使用的最大整数个硬币数量(quo),更新剩余找零(rem),并打印出硬币的数量(num)。最后,更新总找零金额,以便下一次迭代。 3. **代码分析**: - `for`循环按照降序遍历硬币面额,从10美元开始,直到1美分。 - `float quo = (float)((float)change / deno[i])` 计算可以整除的硬币数量。 - `float rem = (float)((float)change % deno[i])` 计算找零后剩余的金额。 - 如果`quo`大于等于1,表示可以使用当前面额的硬币,计算`num`,即能使用的硬币数量,并打印结果。 - 更新`change`,减去已分配的硬币总价值,以便下一轮循环。 4. **C++代码**:给出的代码示例混合了C++和Java语法,`#include`部分是C++头文件,而`Scanner`类是Java的。在C++中,通常会使用`cin`和`cout`进行输入输出。完整的C++实现应该修复这些差异。 5. **算法优化**:这个简单的贪心算法在大多数情况下都能得到正确的结果,但并不总是最优解。例如,如果只有两个25美分和一个10美分,找零15美分,它会先用两个25美分,而不是一个10美分和一个5美分。为了解决这类问题,可以使用更复杂的算法,如动态规划。 6. **动态规划**:在动态规划解决方案中,我们可以创建一个二维数组来存储到目前为止找到的最优解,然后根据每个面额逐步填充这个数组。这种方法确保了总是选择最小硬币组合,但计算复杂度相对较高。 7. **实际应用**:找零问题在现实世界中广泛存在,比如自动售货机、零售店结账系统等。理解如何有效地解决这类问题对软件工程师来说非常重要,因为它涉及到优化和效率,这直接影响到系统的性能。 8. **面试准备**:对于准备面试的候选人,除了理解和掌握这个找零问题的解决方案外,还应练习其他常见的算法题,如排序、搜索、图论问题等,以提高解决问题的能力和熟练度。同时,熟悉不同的数据结构(如数组、链表、树、图等)和算法(如递归、分治、动态规划等)也是必不可少的。

UATHelper: 打包 (Linux): Running: C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\ThirdParty\DotNet\6.0.302\windows\dotnet.exe "C:\Program Files\Epic Games\UE_5.2\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" Cesium Linux Development -Project="C:\Users\卓翼\Documents\Unreal Projects\Cesium\Cesium.uproject" "C:\Users\卓翼\Documents\Unreal Projects\Cesium\Cesium.uproject" -NoUBTMakefiles -remoteini="C:\Users\卓翼\Documents\Unreal Projects\Cesium" -skipdeploy -Manifest="C:\Users\卓翼\Documents\Unreal Projects\Cesium\Intermediate\Build\Manifest.xml" -NoHotReload -log="C:\Users\卓翼\AppDat a\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.2\UBT-Cesium-Linux-Development.txt" UATHelper: 打包 (Linux): Log file: C:\Users\׿��\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.2\UBT-Cesium-Linux-Development.txt UATHelper: 打包 (Linux): Missing precompiled manifest for 'CesiumRuntime', 'C:\Program Files\Epic Games\UE_5.2\Engine\Plugins\Marketplace\CesiumForUnreal\Intermediate\Build\Linux\UnrealGame\Development\CesiumRuntime\CesiumRuntime.precompiled'. This module was most likely not flagged for being included in a precompiled build - set 'PrecompileForTargets = PrecompileTargetsType.Any;' in CesiumRuntime.build.cs to override. If part of a plugin, also check if its 'Type' is correct. UATHelper: 打包 (Linux): Took 1.1931896s to run dotnet.exe, ExitCode=6 UATHelper: 打包 (Linux): UnrealBuildTool failed. See log for more details. (C:\Users\卓翼\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.2\UBT-Cesium-Linux-Development.txt) UATHelper: 打包 (Linux): AutomationTool executed for 0h 0m 3s UATHelper: 打包 (Linux): AutomationTool exiting with ExitCode=6 (6) UATHelper: 打包 (Linux): BUILD FAILED PackagingResults: Error: Unknown Error

2023-07-13 上传