1元、5元、10元、20元、50元、100元六种面额,输入N,计算有多少种组合可以等于N


有足够多的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);
}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM