1. 硬币找零,最少多少张纸币
描述:有1,5,10,50,100元,分别有:a、b、c、d、e张纸币。
若需要支付k元,最少需要多少张纸币能找零,若无解则输出-1
package kdxf;
import java.util.HashMap;
import java.util.Scanner;
public class Test01 {
static HashMap<Integer,Integer> data = new HashMap<>();
static int res = Integer.MAX_VALUE;
static int[] num = {
1,5,10,50,100};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int i=0;i<5;i++){
int p = sc.nextInt();
data.put(num[i],p);
}
int sum = sc.nextInt();
dfs(sum,0,4);
System.out.println(res==Integer.MAX_VALUE?-1:res);
}
public static void dfs(int sum,int count,int start){
if (sum ==0 ){
res = Math.min(res,count);
return;
}else{
for(int i=start;i>=0;i--){
if (num[i]<=sum&&data.get(num[i])!=0){
int money = data.get(num[i]);
int flag = 0;
if (money*num[i]<=sum){
count+=money;
data.put(num[i],0);
flag = sum - money*num[i];
}else{
int q = sum/num[i];
count+=q;
data.put(num[i],data.get(num[i])-q);
flag = sum - q*num[i];
}
dfs(flag,count,start-1);
return;
}
}
}
}
}
运行结果:
2. 将序列排序
描述:给出一个数字序列,需要输出排序过程
package kdxf;
import java.util.Scanner;