用递归写了一个最少硬币问题,然后有少部分数据过不去,个人找不到bug,求救qwq
所用语言是java
思路就是拟人化,假设有1,2,5三种硬币,假设要凑出11,那么肯定是先用5去尝试,
然后就变成了凑出6.
如果出现无法凑出的情况,就回溯到上一步,撤销上一步,然后开始新的尝试
代码如下:
import java.util.Scanner;
class Main
{
static int x,y,z; //x是硬币种数,y是需要凑成的金额数,z是所需硬币数,a是硬币面值数组
static int[] a;
static int coin(int g) //输入数为需要凑成的金额数,返回数为所需要的硬币数
{
int i;
for(i=1;i<=x;i++)
{
if(g>a[x-i])
{
int b=coin(g-a[x-i]);
if (b!=-1)
return 1+b;
}
else if (g==a[x-i])
return 1;
}
return -1;
}
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int p;
x = reader.nextInt();
a = new int[x];
for (int i=0;i<x;i++)
a[i] = reader.nextInt();
y = reader.nextInt();
if (y<=0)
{
System.out.println(-1);
System.exit(0);
}
for (int i=0;i<x;i++)
{
for(int n=0;n<(x-1);n++)
{
if (a[n]>a[n+1])
{
p = a[n+1];
a[n+1] = a[n];
a[n] = p;
}
}
}
z = coin(y);
System.out.println(z);
}
}
第一次尝试发博客,有问题多谢指出