您的位置:首页 > 其它

找零钱以及整数分解成正整数和式组合

2013-08-04 12:33 148 查看
java 代码:利用递归打印所有组合以及总数,修改nextChange()函数即可求解这两个问题

int changes[]={1,2,5};
Map<Integer,Integer> print = new HashMap<Integer,Integer>();

int nextChange(int change){
int nextChange=0;
switch(change){
case 10:
nextChange= 5;
break;
case 5:
nextChange= 2;
break;
case 2:
nextChange= 1;
break;
}
return nextChange;
}

int makeChange(int n, int change,HashMap<Integer,Integer> print){
int way=0,i;
if(change==1){
print.put(1, n);
printAll(print);
return 1;
}
for(i=0;i*change<=n;i++){
print.put(change, i);
way+=makeChange(n-i*change,nextChange(change),print);
}
return way;
}

public void printAll(HashMap<Integer,Integer> map){
Iterator iter = map.entrySet().iterator();
StringBuffer sb = new StringBuffer();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry) iter.next();
Integer key = (Integer) entry.getKey();
Integer val = (Integer) entry.getValue();
for(int i=0;i<val;i++){
sb.append(key+" ");
}
}
System.out.println(sb);
}


c代码:利用动态规划打印总数

#include <stdlib.h>

#define N 10000
int a
;
int change[3]={1,2,5};

int makeChange(int n, int changeCount){
a[0]=1;
int i,j;
for(i=0;i<changeCount;i++){
for(j=change[i]; j<= n; j++){
a[j]=a[j]+a[j-change[i]];
}
}
return a
;
}

int main(){
printf("%d",makeChange(100,3));
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: