贪心算法找零钱

时间:2022-09-09 23:14:30
package 贪心算法找零钱;

public class Main {

/**
* 有3种硬币,10,5,1
* 给定num元,以最少的硬币数来换成它
*/
public static void main(String[] args) {
f(108, 0, 0, 0);
f(108);
}
/**
* 如果硬币多了,可以用用两个数组来存储
* 一个存硬币面值,一个存相应的数目
*/
private static void f(int num)
{
int n10=0,n5=0,n1=0;

if(num>=10)
{
n10=num/10;
num=num%10;
}
if(num>=5)
{
n5=num/5;
num=num%5;
}
if(num<5){
n1=num;
}
System.out.println("10元:"+n10+"---5元:"+n5+"---1元:"+n1);
}

/**
* 递归很慢
*/
private static void f(int num,int n10,int n5,int n1) {
if(num==0)
{
System.out.println("10元:"+n10+"---5元:"+n5+"---1元:"+n1);
return;
}

if(num>=10)
{
f(num-10,n10+1,n5,n1);
}
else if(num>=5&&num<10)
{

f(num-5,n10,n5+1,n1);
}
else if(num<5&&num>=1)
{
f(num-1,n10,n5,n1+1);
}
}
}