1
已采纳
陆姗姗
资深守护
资深守护
这一题因为n的数据范围很大,1<=n<=10000,使用三重for循环来穷举的话会超时,需要转化另一个思路
因为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元的那部分钱可以拆成多少种情况,然后累加起来得到最终结果
1
陆麟瑞
资深天翼
资深天翼
这道题可以用一个很巧妙的方法计算。、
n*=100; for(int i=0; i<=n/50; i++) { ans+=(n-i*50)/20+1; }
最后输出ans即可。
0