#include <iostream>
using namespace std;
int main() {
int total;
while (cin >> total) { // 注意 while 处理多个 case
int a = total;
int i = a/7;
a = a-i*7;
if(a==3&&total>3) {i-=1;a=10;}
if(a==4&&total>4) {i-=1;a=11;}
int j = a/5;
a = a-j*5;
int k = a;
cout<<i+j+k<<endl;
}
}
// 64 位输出请用 printf("%lld")
仅针对这题,我个人拿到题目后首先的解题思路是贪心,有大额先换大额。从代码中也可以看出,我其实就是先换大的,剩下的再换小的。但除完每个数的余数要考虑一下,加上自己之后能否由小的面额再凑出来更少的数量。这题需要考虑的不多,最后找出来就是7余下的3和4,用1面额换太多了,加上7却可以使用5面额来代替。



京公网安备 11010502036488号