Ex 6_17 数量无限的硬币兑换问题_第七次作业

子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i。

递归关系:

初值设定:设b[0]=true

 

求解顺序:按下标从小到大依次求解b[i]的值,最后返回b[v]中的结果即为最终结果。

 1 package org.xiu68.ch06.ex7;
 2 
 3 public class Ex6_17 {
 4 
 5     //数量无限的面值为x1,x2,x3,...,xn的硬币是否能兑换价格v
 6     public static void main(String[] args) {
 7         // TODO Auto-generated method stub
 8         int[] coin=new int[]{5,6};
 9         for(int i=0;i<=30;i++)
10             convertChange(coin,i);    
11     }
12     
13     //coin:硬币面值
14     //v:要兑换的价格
15     public static void convertChange(int[] x,int v){
16         boolean b[]=new boolean[v+1];    //能否用硬币兑换价格v
17         b[0]=true;                        
18         
19         for(int i=1;i<=v;i++){            //能否用硬币兑换价格i (子问题的规模)
20             for(int j=0;j<x.length;j++){
21                 if(i>=x[j] && b[i-x[j]]==true){
22                     b[i]=true;
23                     break;
24                 }else{
25                     b[i]=false;
26                 }
27             }
28         }
29         System.out.println(v+":"+b[v]);
30     }
31     
32     //运行结果
33 /*    0:true
34     1:false
35     2:false
36     3:false
37     4:false
38     5:true
39     6:true
40     7:false
41     8:false
42     9:false
43     10:true
44     11:true
45     12:true
46     13:false
47     14:false
48     15:true
49     16:true
50     17:true
51     18:true
52     19:false
53     20:true
54     21:true
55     22:true
56     23:true
57     24:true
58     25:true
59     26:true
60     27:true
61     28:true
62     29:true
63     30:true*/
64 }
View Code

 

posted @ 2017-12-05 19:31  清风☆薰衣草  阅读(454)  评论(0编辑  收藏  举报