黑马程序员技术交流社区

标题: 来一个算法题 [打印本页]

作者: 暮色醉玄阳    时间: 2014-10-17 11:56
标题: 来一个算法题
如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。
本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1
作者: 暮色醉玄阳    时间: 2014-10-17 11:57
package com.yx;

import java.util.Stack;

public class TianPing {
    Integer[] fama;
    int weight;
    Stack<Integer> stack=new Stack<Integer>();
    StringBuffer sb = new StringBuffer();
    public TianPing(Integer[] array,int weight){
        this.fama = array;
        this.weight = weight;
        for(int a:fama){
            if(a <= weight){
                stack.push(a);
            }
        }
        action(weight,sb);
System.out.println(sb.toString());
    }
    public void action(int weight,StringBuffer sb){
        int totalWeight = 0;
        while(weight <= stack.peek()){
            if(weight==stack.peek()){
                sb.append(stack.peek());
                return;
            }
            stack.pop();
        }
        for(int i=0;i<stack.size();i++){
            totalWeight+=stack.elementAt(i);
        }
        if(weight>totalWeight){
            if(fama[stack.size()]>weight){
                sb.append(fama[stack.size()]+"-(");
                action(fama[stack.size()]-weight,sb);
                sb.append(")");
            }
            else if(fama[stack.size()]<weight){
                sb.append(fama[stack.size()]+"+");
                action(weight - fama[stack.size()],sb);
            }
        }
        else if(weight < totalWeight){
            stack.pop();
            action(weight,sb);
        }
        else if(weight == totalWeight){
            while(!stack.isEmpty()){
                sb.append(stack.pop()+"+");
            }
            sb.setLength(sb.length()-1);
            return;
        }
    }
     
    public static void main(String args[]){
        Integer []array = {1,3,9,27,81};
        for(int i=1;i<=121;i++){
            new TianPing(array,i);
        }
    }
}

这是我借鉴的了,来个大神给个3进制的算法
作者: 泡沫__opt    时间: 2014-10-17 15:25
我擦~~太猛了……看不懂啊……
作者: 潘杰    时间: 2014-10-17 23:32
Java不用搞这种算法题把好像...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2