100,50,20,10元组合

本文分享了一次深入算法研究的经历,并对比了不同平台的讨论内容。通过具体实例展示了如何利用栈操作解决组合问题,同时强调了代码简洁性和效率的重要性。在实践过程中,作者不仅分享了解决方案,还反思了不同论坛中解决问题的方法差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天去看了看算法 ,顺便说一下 那个德问论坛不错,那里的人挺牛逼。当然这里也很好。

说说这个题 可能有人听过把。就是100,50,20,10各有1,2,5,10张,进行组合,有多少是一百的。看论坛里他们写的代码实在是麻烦。这里给出我的解决方法。


import java.util.Stack;

public class Combination {

private static Stack<Integer> money=new Stack<Integer>();//栈
private static int[] sum={5,5,2,1}; //提供给予的10,20,50,100 对应的个数
private static int[] num={0,0,0,0}; //记录下 当前用过的次数。
private static int[] coin={10,20,50,100};//给予的钞票面值
private static int count=0; //记录总共的可能数


public static void main(String args[]){
Commoney(100);
System.out.println("总数是:"+count);

}

public static void Commoney(int need){
for(int i=0;i<4;i++){
int dollar=coin[i];
//满足 1.100还没有分完。 2当前栈中没值,或者比前面的小,这样是为了有序。是结果集不重复。 3.当前的钞票个数还米有用完
if(need-dollar>=0&&(money.size()==0||dollar<=money.get(money.size()-1))&&num[i]<sum[i]){
money.push(dollar);
num[i]++;
if(need-dollar>0){
Commoney(need-dollar);
}
else{
count++;
for (Integer m: money){
System.out.print (m);
System.out.print (" ");
}
System.out.println();
}
money.pop();
num[i]--;
}
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值