c语言小明手中有硬币,小红手中有若干张10元的纸币。已知 1 角硬币厚 1.8mm,5 角硬币厚 1.5mm,1 元硬币厚 2.0mm 。小红拿出若干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,且三摞硬币的金额之和正好等于小红要求的面值,则双方交换,否则没有办法交换。 输入: 小红希望交换几张10元的纸币 输出: 1 角的数量,5 角的数量,1元的数量
时间: 2023-06-27 12:02:31 浏览: 141
这道题目可以使用暴力枚举的方法来解决,具体思路如下:
首先,我们需要确定三摞硬币的高度,由于三摞硬币高度相等,因此我们可以枚举其中一摞硬币的高度,然后根据比例关系计算出另外两摞硬币的高度。
然后,我们需要确定每一摞硬币的数量。由于要求三摞硬币的金额之和正好等于小红要求的面值,因此我们可以用小红要求的面值减去三摞硬币的面值之和,得到剩余的金额,然后根据硬币的面值和数量的比例关系,计算出每一摞硬币的数量。
最后,我们需要判断三摞硬币的数量是否都为正整数,如果是,则输出每一摞硬币的数量,否则输出无法交换。
下面是 C 语言的代码实现:
```c
#include <stdio.h>
int main()
{
int red, j1, j5, j10;
double h1, h5, h10;
// 输入小红要求交换的10元纸币张数
printf("请输入小红要求交换的10元纸币张数:");
scanf("%d", &red);
// 枚举一摞1角硬币的数量
for (j1 = 1; j1 <= 10000; j1++) {
// 计算一摞1角硬币的高度
h1 = j1 * 1.8 / 10;
// 枚举一摞5角硬币的数量
for (j5 = 1; j5 <= 2000; j5++) {
// 计算一摞5角硬币的高度
h5 = j5 * 1.5 / 2;
// 枚举一摞1元硬币的数量
for (j10 = 1; j10 <= 100; j10++) {
// 计算一摞1元硬币的高度
h10 = j10 * 2.0;
// 判断三摞硬币的高度是否相等
if (h1 == h5 && h5 == h10) {
// 计算三摞硬币的面值之和
double value = j1 * 0.1 + j5 * 0.5 + j10;
// 计算剩余的金额
double remain = red * 10.0 - value;
// 计算每一摞硬币的数量
int n1 = remain / 0.1 / h1;
int n5 = remain / 0.5 / h5;
int n10 = remain / h10;
// 判断每一摞硬币的数量是否都为正整数
if (n1 > 0 && n5 > 0 && n10 > 0) {
printf("1角的数量:%d,5角的数量:%d,1元的数量:%d\n", j1, j5, j10);
return 0;
}
}
}
}
}
printf("无法交换!\n");
return 0;
}
```
注意,由于硬币的数量可能比较大,因此在计算硬币的面值时,我们需要使用 `double` 类型来保存结果。同时,在判断每一摞硬币的数量是否为正整数时,由于浮点数计算存在精度误差,因此我们需要将结果转换成整数再进行判断。
阅读全文