题目:某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?
首先根据题目的描述可知,总共有15张邮票,也就说输入某一个数,表示邮票的张数,然后打印出有多少种不同的现金组合方式,根据现金组合的种树算的。
说说我的思路,首先,那个邮票的面值是多少是不会影响结果的,所以,我先把所有邮票的面值乘以10,因为是整型就会方便很多,我就可以把总数算出来,188元,然后在根据输入的邮票数目进行递归运算。代码如下:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main{
public static void main(String[] args) {
Set<Integer>set=new HashSet<>();
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
if(n!=0) {
f(n,5,4,6,set,188);
System.out.println(set.size());
}else {
System.out.println(0);
}
}
private static void f(int index,int x,int y,int z,Set<Integer>set,int money) {
if(x>0&&index>0) {
f(index-1,x-1,y,z,set,money-8);
}
if(y>0&&index>0) {
f(index-1,x,y-1,z,set,money-10);
}
if(z>0&&index>0) {
f(index-1,x,y,z-1,set,money-18);
}
if(index==0) {
set.add(money);
}
}
}