某公司财务要发现金工资,需要提前换取 100 元、50 元、20 元、10 元、5 元和 1 元的人民币,输入工资额,计算发放张数最少情况下,各面额的纸币需要多少张。用c语言解决
时间: 2024-10-01 10:08:27 浏览: 51
这个问题可以用贪心算法来解决,首先将剩余的工资总额按照从大到小的顺序分配给所需的面额。以下是用C语言的一个简单解决方案:
```c
#include <stdio.h>
int main() {
int wage, hundred, fifty, twenty, ten, five, one;
// 输入工资额
printf("请输入工资额:");
scanf("%d", &wage);
// 初始化面额计数
hundred = fifty = twenty = ten = five = one = 0;
while (wage > 0) {
// 首先尝试最大面额直到无法再支付
if (hundred <= 0) {
fifty += (wage / 50);
wage %= 50;
} else {
hundred--;
wage -= 100;
}
// 更新其他面额
while (fifty >= 2 && wage >= 50) {
five += 4; // 提前取出两个5元换一个10元
fifty -= 2;
wage -= 50;
}
if (five >= 1 && wage >= 5) {
five--;
wage -= 5;
}
while (twenty >= 4 && wage >= 20) {
one += 8; // 提前取出四个1元换一个5元
twenty -= 4;
wage -= 20;
}
if (twenty >= 1 && wage >= 20) {
twenty--;
wage -= 20;
}
while (ten >= 3 && wage >= 10) {
one += 6; // 提前取出三个1元换一个10元
ten -= 3;
wage -= 10;
}
if (ten >= 1 && wage >= 10) {
ten--;
wage -= 10;
}
if (wage >= 1) {
one++;
wage -= 1;
}
}
printf("100元:%d张\n50元:%d张\n20元:%d张\n10元:%d张\n5元:%d张\n1元:%d张\n",
hundred, fifty, twenty, ten, five, one);
return 0;
}
```
当你运行这个程序并输入工资额时,它会输出对应面额需要的最小张数。
阅读全文