有足夠多的1元、5元、10元、20元、50元、100元六種面額的紙幣,輸入N,計算出有多少種組合可以等於N;
如輸入N=5,則返回2。因為有兩種組合:1+1+1+1+1=5,5=5,即5張1元或者1張5元;
Java代碼如下:
public class Test{
public int getGroups(int N){
int round5=(int) Math.floor(N/5); //N除以5並向下取整
int round10=(int) Math.floor(N/10);
int round20=(int) Math.floor(N/20);
int round50=(int) Math.floor(N/50);
int round100=(int) Math.floor(N/100);
int num=0;
if(N>0&&N<5){ //N取值大於0小於5
num=1;
}
if(N>=5&&N<10 && round5>0){ //N取值大於等於5小於10
for(int i5=0;i5<=round5;i5++){
int n5=N-(5*i5);
if(n5>=0){
num=num+1;
}
}}
if(N>=10&&N<20 && round5>0&& round10>0){ //N取值大於等於10小於20
for(int i5=0;i5<=round5;i5++){
for(int i10=0;i10<=round10;i10++){
int n10=N-(5*i5+10*i10);
if(n10>=0){
num=num+1;
}}}}
if(N>=20&&N<50 && round5>0&& round10>0&&round20>0){ //N取值大於等於20小於50
for(int i5=0;i5<=round5;i5++){
for(int i10=0;i10<=round10;i10++){
for(int i20=0;i20<round20;i20++){
int n20=N-(5*i5+10*i10+20*i20);
if(n20>=0){
num=num+1;
}}}}}
if(N>=50&&N<100 && round5>0&& round10>0&&round20>0&&round50>0){ //N取值大於等於50小於100
for(int i5=0;i5<=round5;i5++){
for(int i10=0;i10<=round10;i10++){
for(int i20=0;i20<round20;i20++){
for(int i50=0;i50<round50;i50++){
int n50=N-(5*i5+10*i10+20*i20+50*i50);
if(n50>=0){
num=num+1;
}}}}}}
if(N>=100 && round5>0&& round10>0&&round20>0&&round50>0&&round100>0){ //N取值大於等於100
for(int i5=0;i5<=round5;i5++){
for(int i10=0;i10<=round10;i10++){
for(int i20=0;i20<round20;i20++){
for(int i50=0;i50<round50;i50++){
for(int i100=0;i100<round100;i100++){
int n100=N-(5*i5+10*i10+20*i20+50*i50+100*i100);
if(n100>=0){
num=num+1;
}}}}}}}
return num;
}
public static void main(String[] args){
Test test=new Test();
int num=test.getGroups(4);
System.out.println(num);
}
}