多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 问题描述 分别有1,5,10,50,100元,分别有5,2,2,3,5张纸币。问若要支付k元,则需要多少张纸币? ## 问题分析 在选取的时候,遵循**优先使用面值最大纸币**的原则进行选取 1. 尽可能多的使用100元(即最大的); 2. 余下部分尽可能多的使用50元; 3. 余下部分尽可能多的使用10元; 4. 余下部分尽可能多的使用5元; 5. 余下部分使用1元; 由此,我们可以写出代码: ~~~ #include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define ms(a,b) memset(a,b,sizeof(a)) #define INF 0x7f7f7f7f const int maxn=1e6+10; const int mod=1e9+7; const int N=5; using namespace std; // 各纸币的数量 int Money[N]={5,3,2,2,5};   // 纸币的面值 int Value[N]={1,5,10,50,100};   void solve(int money) { int num=0; for(int i=N-1;i>0;i--) { int c=min(money/Value[i],Money[i]); money=money-Value[i]*c; num+=c; } if(money>0) cout<<"Can not pay"<<endl; else cout<<num<<endl; } int main(int argc, char const *argv[]) { ios::sync_with_stdio(false); cin.tie(0); int k; // 需要支付k元 cin>>k; solve(k); return 0; } ~~~ 类似问题:[HDU2021](http://acm.hdu.edu.cn/showproblem.php?pid=2021)