用java实现最少硬币问题_硬币问题java实现

本文介绍了一个使用Java解决最少硬币组合问题的代码实现。通过初始化、查找最小硬币个数和递归思想,找到组合给定总和所需的最少硬币数量,并能打印出具体的硬币组合。
摘要由CSDN通过智能技术生成

public class Test {

public static int sum = 21;//硬币总和

public static int n = 4;//硬币类型数

public static int[] min = new int[sum+1];//存储每个总和需要的最小硬币个数

public static int[] coin = {2,3,5,10};//硬币币值数组

public static void main(String[] args){

init();

findmin();

System.out.println(min[sum]);//打印出组合成改Sum的最少硬币数

print_ans(sum);

}

//初始化min,为每个总和,设置一个较大的初始值

public static void init(){

for(int i=1;i <= sum; i++){

min[i] = 100000;

}

}

/*

* 查找每个总和,需要的最少硬币个数

* 如果各种硬币不能组合成该总和,则存储着初始值

*/

public static void findmin(){

for(int i=1;i<=sum;i++){//遍历每种总和

for(int j=0;j

if(i>=coin[j]){//如果该硬币币值,比要组成的总和大

/*

* 下面类似递归的思想

* 假设我们知道了某个总和需要的最小硬币数

* 那么当我们确定了一个硬币coin[j],那么我剩下的,就是要求“当前要求总和减去这个硬币(min[i-coin[j]])”的最少硬币数

* 而我们根据递归的思想,我们是已经知道了min[i-coin[j]]

* 所以我们接下来判断,min[i-coin[j]]+1(因为要多加一个硬币coin[j]),是否比原来存储的小,如果是,则更新这个值

*/

if(min[i-coin[j]]+1

min[i] = min[i-coin[j]]+1;

}

}

}

}

}

public static void print_ans(int s){//打印出最小数目

for(int i=0;i

if(s>coin[i] && min[s]==min[s-coin[i]]+1){

System.out.println(coin[i]);

print_ans(s-coin[i]);

break;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值