1 条题解
-
0
C
说明
本题要求将给定金额分解为100元、50元、20元、10元、5元、1元的钞票张数,且遵循“尽量使用大面额”的原则。核心思路是从大到小依次计算每种面额的张数:
- 对每种面额,用当前剩余金额除以面额得到张数(整数除法,自动取商);
- 用取模运算更新剩余金额(剩余金额 = 剩余金额 % 面额);
- 按100→50→20→10→5→1的顺序依次计算,最后逐行输出张数。
整个过程为6次除法和取模运算,时间复杂度O(1),适合处理小于1000的金额。
代码
#include <stdio.h> int main() { int money; // 读取输入金额 scanf("%d", &money); // 计算100元张数,更新剩余金额 int a = money / 100; money %= 100; // 计算50元张数,更新剩余金额 int b = money / 50; money %= 50; // 计算20元张数,更新剩余金额 int c = money / 20; money %= 20; // 计算10元张数,更新剩余金额 int d = money / 10; money %= 10; // 计算5元张数,更新剩余金额 int e = money / 5; money %= 5; // 1元张数为剩余金额 int f = money; // 按顺序输出各面额张数 printf("%d\n%d\n%d\n%d\n%d\n%d\n", a, b, c, d, e, f); return 0; }C语言拓展知识
推荐搜索:整数除法与取模运算的配合使用(分解金额的通用方法)、多变量输出时printf的格式控制(换行符的使用)、从大到小贪心策略在类似问题中的应用(如硬币找零)。
C++
说明
本题逻辑与C语言完全一致(从大到小计算各面额张数),C++通过输入输出流简化代码,无需格式控制符,同时保留相同的贪心计算逻辑,代码更简洁直观。
新知识
- 贪心策略应用:
- 术语:从大面额到小面额依次计算
- 解释:通过“先尽可能用大面额,再处理剩余金额”的贪心思路,确保使用的总张数最少,且符合题目“尽量使用大面额”的要求。例如735元先分7张100元,剩余35元再分1张20元,以此类推。
- 对比:C和C++实现思路相同,但C++的输入输出更简洁,无需关注格式字符串。
AC
#include <bits/stdc++.h> using namespace std; int main() { int money; // 读取输入金额 cin >> money; // 计算100元张数,更新剩余金额 int a = money / 100; money %= 100; // 计算50元张数,更新剩余金额 int b = money / 50; money %= 50; // 计算20元张数,更新剩余金额 int c = money / 20; money %= 20; // 计算10元张数,更新剩余金额 int d = money / 10; money %= 10; // 计算5元张数,更新剩余金额 int e = money / 5; money %= 5; // 1元张数为剩余金额 int f = money; // 按顺序输出各面额张数 cout << a << endl << b << endl << c << endl << d << endl << e << endl << f << endl; return 0; }C++拓展知识
推荐搜索:贪心算法在货币找零问题中的适用性(为何适用于人民币面额)、C++中
endl与\n在多换行输出中的差异、整数运算在金额分解中的精度优势(对比浮点数)。
- 1
信息
- ID
- 258
- 时间
- 60ms
- 内存
- 10MiB
- 难度
- 6
- 标签
- 递交数
- 24
- 已通过
- 12
- 上传者