问题标题: 酷町堂:酷町堂1801 换小额钞票

0
0
已解决
李牧之
李牧之
新手光能
新手光能
#include<iostream>
using namespace std;
int main(){
    long long n,ans=0;
    cin>>n;
    n=n*100;
    for(int i=0;i<=n/10;i++){
        for(int j=0;j<=n/20;j++){
            for(int k=0;k<=n/50;k++){
                if (i*10+j*20+k*50==n) ans++;
            }
        }
    }
    cout<<ans;
    return 0;
}

 


0
已采纳
邵逸儒
邵逸儒
中级天翼
中级天翼

因为100的倍数一定是50的倍数,我们可以从一共有多少个50元来考虑,最小的情况可能是有0个50元,最多的情况可能是有n*100/50个50元

而每个50元可以拆成①10+10+10+10+10,②20+20+10,③ 20+10+10+10三种情况,100元的话可以拆成100/20+1共六种情况,150元的话可以拆成150/20+1共8中情况,以此类推。。。

 

所以最外层循环是50元的个数,从0到n*100/50,循环内,我们计算不是50元的那部分钱可以拆成多少种情况,然后累加起来得到最终结果

n*=100;
    for(int i=0; i<=n/50; i++)
    {
            ans+=(n-i*50)/20+1;
    }

最后输出ans即可。

0
杨陈卓
杨陈卓
新手天翼
新手天翼
    n*=100;
    for(int i=0; i<=n/50; i++)
    {
            ans+=(n-i*50)/20+1;
    }
    cout<<ans<<endl;

核心

0
黄昊轩
黄昊轩
新手守护
新手守护

 

因为100的倍数一定是50的倍数,我们可以从一共有多少个50元来考虑,最小的情况可能是有0个50元,最多的情况可能是有n*100/50个50元

而每个50元可以拆成①10+10+10+10+10,②20+20+10,③ 20+10+10+10三种情况,100元的话可以拆成100/20+1共六种情况,150元的话可以拆成150/20+1共8中情况,

0
我要回答