题目描述:
小C不喜欢带钱,有一次竟被他碰上了一家不能使用移动支付(也不能找钱)的神秘商店。请问小C至少准备多少张RMB才能恰好支付n元。RMB的面额有100元,50元,20元,10元,5元,1元。
输入格式:
输入一个整数n
输出格式:
最少带几张。
样例输入1:
50
样例输出1:
1
约定:
1<=n<=100
#include <iostream>
using namespace std;
int solve(int tar, int * meta, int metan, int * seed = NULL, int seedn = 0)
{
if (tar == 0)
{
//for (int i = 0; i < seedn; i++) cout << seed[i] << " ";
//cout << endl;
return seedn;
}
int min = -1;
int m;
int * seed1 = new int[seedn + 1];
if (seed)
memcpy(seed1, seed, sizeof(int) * seedn);
for (int i = 0; i < metan; i++)
{
if (meta[i] <= tar)
{
seed1[seedn] = meta[i];
m = solve(tar - meta[i], meta, metan, seed1, seedn + 1);
if (m != -1 && (min == -1 || min > m))
min = m;
break;
}
}
delete[] seed1;
return min;
}
int main()
{
int arr[] = { 100, 50, 20, 10, 5, 1 };
int n = 6;
int total;
cin >> total;
int result = solve(total, arr, n);
cout << result << endl;
return 0;
}
采纳
****这道题你可以去写判定,比如说115元,****
115/100=1
总数就+1,
接着115-100=15
15/50=0
总数+0
15-0=15
15/20=0
总数+0
15-0=15
15/10=1
总数+1
15-10=5
5/5=1
总数+1
0/1=0
总数+0
输出总数
return 0;
思路大概是这样,加油哦~
这个才是最简单的做法
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
printf("%d",n/100+n%100/50+n%100%50/20+n%100%50%20/10+n%100%50%20%10/5+n%100%50%20%10%5/1);
return 0;
}