题目内容:小明现在有x元,现在想买一件y(y≤x)元的物品,商店里有五种货币,100元、20元、10元、5元、1元无限张,服务员会以最少的 数量 找零钱。问小明用x元买了一件y元的物品后找了多少张零钱。
时间: 2024-05-08 16:22:26 浏览: 176
这道题可以使用贪心算法来解决。我们可以从面值最大的货币开始考虑,每次尽量使用面值最大的货币,直到凑够了找零的金额。
具体而言,假设小明需要找x元钱,他所购买的物品价格为y元,那么他需要找回的钱数为x-y元。我们可以从100元开始考虑,如果x-y大于或等于100元,那么可以找1张100元的钞票,然后更新x-y的值为x-y-100。接着我们依次考虑20元、10元、5元和1元,每次尽量使用当前面值最大的货币,直到凑够了找零的金额。
实现代码如下:
```
def get_change(x, y):
change = x - y # 需要找回的钱数
values = [100, 20, 10, 5, 1] # 面值数组
counts = [0] * len(values) # 对应面值的张数
for i, value in enumerate(values):
while change >= value:
counts[i] += 1
change -= value
return sum(counts) # 返回总张数
```
其中,`enumerate()`函数可以同时遍历列表的元素和下标。
相关问题
c语言题目内容:小明现在有x元,现在想买一件y(y≤x)元的物品,商店里有五种货币,100元、20元、10元、5元、1元无限张,服务员会以最少的 数量 找零钱。问小明用x元买了一件y元的物品后找了多少张零钱。
题目分析:
这道题需要我们用到贪心算法来解决。我们可以从大到小依次考虑使用每种面值的货币,每次尽可能使用当前面值的货币,直到找完为止。
具体实现:
1. 用 `change` 表示找零的总额,初始值为 `x - y`。
2. 定义一个数组 `coins` 存储五种面值的货币。
3. 遍历 `coins` 数组,对于每个面值 `coin`,计算当前找零中可以使用的该面值货币的最大张数 `count`,然后将 `count` 加入到答案中。
4. 将 `change` 减去已经找零的金额 `coin * count`,并更新 `count`。
5. 重复步骤 3 和步骤 4,直到 `change` 的值为 0。
6. 输出答案。
C 语言代码实现:
```c
#include <stdio.h>
int main() {
int x, y, change, coins[] = {100, 20, 10, 5, 1};
scanf("%d%d", &x, &y);
change = x - y;
int ans = 0;
for (int i = 0; i < 5; i++) {
int count = change / coins[i];
ans += count;
change -= coins[i] * count;
}
printf("%d\n", ans);
return 0;
}
```
输入格式:
第一行包含两个整数 `x` 和 `y`,表示小明手上的钱和物品的价格。
输出格式:
输出一个整数,表示找零的最少张数。
小明现在有x元,现在想买一件y (y≤x)元的物品,商店里有五种货币,50元、20元、10元、5元、1元无限张,服务员会以最少的数量找零钱。问小明用x元买了一件y元的物品后找了多少张零钱
这道题可以用贪心算法解决,具体思路是:
1. 计算需要找回的钱数 change = x - y。
2. 从大到小枚举五种货币,对于当前货币面额的钞票,尽可能多的使用,直到无法再使用该面额的钞票。
3. 计算使用了多少张当前面额的钞票,累加到总数 count 中。
4. 如果当前面额的钞票已经使用完,则继续枚举下一种货币面额。
5. 重复步骤2-4,直到找完所有的钞票。
下面是一个 Python 代码示例:
```
def get_change(x, y):
change = x - y
count = 0
for coin in [50, 20, 10, 5, 1]:
if change >= coin:
count += change // coin
change %= coin
return count
```
其中,`//` 表示整除操作,即取商的整数部分。你可以调用这个函数来解决你的问题。
阅读全文