找零钱最佳组合假设商店货品价格(R)都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括: 50元(N50)、10元(N10) 5元(N5)、1元(N1) 四种结合等价类划分法和边界值分析法为上述程序设计出相应的测试用例。
时间: 2023-12-04 22:02:10 浏览: 247
等价类划分法:
1. 顾客付款在100元内且刚好为商品价格,即 P = R,此时不需要找零,测试用例为 P=50, R=50;P=10, R=10;P=5, R=5;P=1, R=1。
2. 顾客付款在100元内且需要找零,测试用例为 P=100, R=50;P=100, R=10;P=100, R=5;P=100, R=1;P=60, R=30;P=65, R=25;P=20, R=10;P=25, R=5;P=10, R=1。
3. 顾客付款超过100元,测试用例为 P=101, R=50;P=200, R=100;P=105, R=60;P=150, R=70。
边界值分析法:
1. P=100, R=50,这是最小等价类的最小边界值测试用例。
2. P=100, R=1,这是最小等价类的最大边界值测试用例。
3. P=101, R=50,这是超过100元的最小边界值测试用例。
4. P=150, R=70,这是超过100元的最大边界值测试用例。
对于每个测试用例,可以验证程序是否能正确计算出找零钱的最佳组合,且找零钱的张数最少。同时,还可以验证程序是否能正确处理各种货币面值的组合情况。例如,如果顾客付款为110元,商店需要找零60元,那么程序应该给出5张10元、1张5元、1张1元的组合方式,而不是6张10元、6张1元的组合方式。
相关问题
html设计找零钱最佳组合假设商店货品价格(R)都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:50元(N50)、10元(N10)、5元(N5)、1元(N1)四种
面值,请你设计一个HTML页面,让顾客输入商品价格和付款金额,然后显示最佳的找零组合。
HTML代码如下:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>找零计算器</title>
</head>
<body>
<h1>找零计算器</h1>
<form>
<label for="price">商品价格:</label>
<input type="number" id="price" name="price" min="1" max="100" required>
<br>
<label for="payment">付款金额:</label>
<input type="number" id="payment" name="payment" min="1" max="100" required>
<br>
<button type="button" onclick="calculate()">计算找零</button>
</form>
<p id="result"></p>
<script>
function calculate() {
var price = document.getElementById("price").value;
var payment = document.getElementById("payment").value;
var change = payment - price;
var n50 = Math.floor(change / 50);
var n10 = Math.floor((change - n50 * 50) / 10);
var n5 = Math.floor((change - n50 * 50 - n10 * 10) / 5);
var n1 = change - n50 * 50 - n10 * 10 - n5 * 5;
var result = "找零:" + change + "元,最佳组合为:";
if (n50 > 0) {
result += n50 + "张50元,";
}
if (n10 > 0) {
result += n10 + "张10元,";
}
if (n5 > 0) {
result += n5 + "张5元,";
}
if (n1 > 0) {
result += n1 + "张1元。";
}
document.getElementById("result").innerHTML = result;
}
</script>
</body>
</html>
```
解释:
1. HTML页面包含一个表单,用户输入商品价格和付款金额。
2. 当用户点击“计算找零”按钮时,调用calculate()函数进行计算。
3. calculate()函数获取商品价格和付款金额,计算出找零金额和各种面值的张数。
4. 最后将计算结果显示在页面上。
注意事项:
1. 商品价格和付款金额的输入框设置了最小值为1,最大值为100,且必填。
2. JavaScript代码中用Math.floor()函数进行向下取整操作,确保找零张数为整数。
3. 在计算结果中,只显示存在的面值张数,不存在的面值不显示。
找零钱最佳组合 假设商店货品价格(R)皆不大于100元(且为整数 ),若顾客付款在100元 内(P),求找给顾客之最少货币个(张)数? (货币面值50元(N50),10元(N10),5元 (N5),1元(N1)四种),编写C语言或c++程序
为了找到找零钱的最佳组合,你可以使用动态规划的方法解决这个问题。我们可以创建一个二维数组 dp,其中 dp[i][j] 表示支付金额 i 时,最小需要的硬币张数,当最后一枚硬币是价值为 j 的货币(例如,dp[i][50] 表示支付 i 元,最后一枚是50元硬币的情况)。以下是 C++ 的基本算法:
```cpp
#include <iostream>
using namespace std;
int coinChange(int R, int P, vector<int>& coins) {
const int N = coins.size();
vector<vector<int>> dp(P + 1, vector<int>(R + 1, -1));
dp[0][0] = 0; // 零钱不需要硬币
for (int i = 1; i <= P; ++i) {
for (int j = 1; j <= R; ++j) {
if (coins[N - 1] <= j && dp[i-coins[N-1]][j-coins[N-1]] != -1) {
dp[i][j] = dp[i-coins[N-1]][j-coins[N-1]] + 1;
}
for (int k = 0; k < N - 1 && coins[k] <= j; ++k) {
if (dp[i][j] == -1 || dp[i][j] > dp[i-coins[k]][j]) {
dp[i][j] = dp[i-coins[k]][j];
}
}
}
}
return dp[P][R] != -1 ? dp[P][R] : -1; // 如果找不到合适的组合返回-1
}
int main() {
vector<int> coins = {50, 10, 5, 1};
int P = 87; // 顾客的付款金额
cout << "最小硬币张数: " << coinChange(P, 100, coins) << endl;
return 0;
}
```
这个程序会找出顾客支付 P 元时找零所需最少的硬币张数。如果无法组成有效的找零方案(如 P 大于所有硬币面值总和),函数将返回 -1。
阅读全文