#include<iostream> using namespace std; int main(){ float m[2][6]; m[0][0]=10; m[0][1]=5; m[0][2]=1; m[0][3]=0.5; m[0][4]=0.2; m[0][5]=0.1; float money; cin>>money; for(int i=0;i<6;i++){ while(money>m[0][i]){ money=money-m[0][i]; m[1][i]++; } cout<<money<<"mm"<<endl; } float count=0; for(int i=0;i<6;i++){ cout<<m[1][i]<<endl; count=count+m[1][i]; } cout<<count; } 这是我写的贪心算法解决找零钱问题修正代码
时间: 2023-12-12 16:04:40 浏览: 135
这个代码似乎是一个找零钱的贪心算法,其中 `m` 数组用来存储钞票的面值和数量,第一行表示面值,第二行表示数量。对于给定的钱数 `money`,程序会从大到小遍历每种面值的钞票,尽可能多地使用该面值的钞票,直到找零完毕。最后输出每种面值的钞票使用数量和总数量。
不过,这个代码存在一些问题:
1. 对于输入的钱数,程序没有进行有效性检查,如果输入非数字字符或者负数,程序将会出错。
2. 在处理钱数时,程序使用了浮点数类型 `float`,但是浮点数类型在表示小数时可能存在精度问题,可能会导致计算结果出现误差。
3. 在输出找零结果时,程序没有指定输出的精度,可能会导致输出结果过长或者不精确。
为了修正这些问题,可以考虑以下几点:
1. 在读入钱数时,可以使用 `cin.fail()` 和 `cin.clear()` 函数进行有效性检查,确保输入的是数字字符。
2. 在处理钱数时,可以使用整数类型 `int`,将钱数乘以100转换为分,避免浮点数精度问题的影响。
3. 在输出找零结果时,可以使用 `iomanip` 库的 `setprecision()` 函数设置输出的精度,避免输出结果过长或者不精确。
下面是一个修正后的代码示例,供您参考:
```cpp
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int m[2][6] = {
{1000, 500, 100, 50, 20, 10},
{0, 0, 0, 0, 0, 0}
};
int money = 0;
cout << "请输入钱数(单位:元):";
cin >> money;
if (cin.fail() || money < 0) {
cout << "输入无效!" << endl;
return 0;
}
money *= 100; // 将钱数转换为分
for (int i = 0; i < 6; i++) {
while (money >= m[0][i]) {
money -= m[0][i];
m[1][i]++;
}
}
float count = 0;
cout << "找零结果为:" << endl;
for (int i = 0; i < 6; i++) {
cout << fixed << setprecision(2) << float(m[0][i]) / 100 << "元:"
<< m[1][i] << "张" << endl;
count += m[1][i];
}
cout << "总钞票数:" << count << "张" << endl;
return 0;
}
```
阅读全文