#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面额来代替。