您的位置:首页 > 其它

从面值为 1,4,12,21的钱币中最多取五张,产生1~n的连续的数目,问这个n有多大(华为)

2010-09-10 17:05 295 查看
//回溯法来求解这个问题

int[] money = new int{0,1,4,12,21};

int num = 5;//五张

boolean find = false;//是否找到

int[] log = new int[num];//记录选择了哪几张,最多五张

public boolean comable(int n,int value){

//从剩下n张钱币中组合出价值value

  if(n>=0&& value==0){

    //还有钱币可以选择,且已经组合出了所需要的值,打印

    find = true;

    int sum = 0;

    for(int i = 0;i<5&&log[i]!=0;i++){

    sum += money[log[i]];

    System.out.print(money[log[i]]+" , ");

    }

    System.out.println("总数为:"+sum);

  }else

    //&&!find用来废除结果一样只是顺序不一样的结果

    for(int j = 0;j<5&&!find&&n>0;j++)

      if(value-money[j])>0){

        log[k++] = j;

        comable(n-1,value-money[j]);

        log[--k] = 0;

      }

  return find;

}

//如何调用

for(int i=1;comable(5,i);i++,find = false);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐