一个老板 给工人一段金条  让工人工作7天   每天可以拿走 金条的 1/7   但是只允许在金条上切 2刀我用脑子想出了 答案 但是 落实代码上 就不会写了应该是 切成  1/7, 2/7, 4/7, 三份 
然后
第一天  拿 1/7 
第二天  用手里的 1/7 换 2/7  那段
第三天  拿 1/7
第四天   用 手里的 1/7 和 2/7 换  4/7 那段
第五天  拿 1/7
第六天  用 手里的  1/7 换  2/7 哪段
第7天  拿 1/7
 
我想问下  如果我这个题目写成代码 都要用到什么算法   不需要写好的代码   告诉我下大致思路就行 谢谢大牛们

解决方案 »

  1.   

    我就是按你说的下了过程,不知道是不是这样,愿听大神们详解!
    import java.util.*;
    public class test{
    public static void main(String[] args){
    LinkedList<Integer> boss=new LinkedList<Integer>();//老板手上的工钱
    LinkedList<Integer> hands=new LinkedList<Integer>();//工人手上的工钱
    boss.add(1);//添加老板的工钱
    boss.add(2);
    boss.add(4);
    for(int i=0;i<boss.size();i++){
    System.out.println("boss:"+boss.get(i));
    }
    if(boss.contains(1)){//第一天
    boss.remove(boss.indexOf(1));
    hands.add(1);
    }
    if(boss.contains(2)&&hands.contains(1)){//第二天
    boss.remove(boss.indexOf(2));
    hands.remove(hands.indexOf(1));
    boss.add(1);
    hands.add(2);
    }
    if(boss.contains(1)){//第三天
    boss.remove(boss.indexOf(1));
    hands.add(1);
    }
    if(boss.contains(4)&&hands.contains(1)&&hands.contains(2)){//第四天
    boss.remove(boss.indexOf(4));
    hands.remove(hands.indexOf(1));
    hands.remove(hands.indexOf(2));
    hands.add(4);
    boss.add(1);
    boss.add(2);
    }
    if(boss.contains(1)){//第五天
    boss.remove(boss.indexOf(1));
    hands.add(1);
    }
    if(boss.contains(2)&&hands.contains(1)){//第六天
    boss.remove(boss.indexOf(2));
    hands.remove(hands.indexOf(1));
    boss.add(1);
    hands.add(2);
    }
    if(boss.contains(1)){//第七天
    boss.remove(boss.indexOf(1));
    hands.add(1);
    }
    for(int i=0;i<boss.size();i++){
    System.out.println("boss:"+boss.get(i));
    }
    for(int i=0;i<hands.size();i++){
    System.out.println("hands:"+hands.get(i));
    }


    }
    }
      

  2.   

    运行看一下代码,不知道是不是你想的。 有问题 下午给你解答。import java.util.Arrays;
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {

    //老板手中的钱
    int[] boss = new int[]{1, 2, 4};

    //工人手中的钱
    int[] workers = new int[3];

    //7 是工作七天 循环7天
    for (int i = 0; i < 7; i++) {

    //对老板的工资进行排序,为了使用Arrays.binarySearch方法
    Arrays.sort(boss);

    //b的值 true 表示 使用工人现有一段黄金+1天的工换来老板手中的一段黄金。 false表示 使用工人的两段黄金+1天的工换老板的黄金
    boolean b = true;
    for (int j = 0; j < workers.length; j++) {

    //查找老板是否有workers[j] + 1段黄金
    int index = Arrays.binarySearch(boss, workers[j] + 1);

    if(index > -1) {
    //找到以后换黄金
    int temp = workers[j];
    workers[j] = boss[index];
    boss[index] = temp;
    b = false;
    break;
    }
    }

    if(b){
    for (int j = 0; j < workers.length - 1; j++) {
    for (int j2 = 0; j2 < workers.length; j2++) {
    //查找老板是否有workers[j] + workers[j2] + 1段黄金
    int index = Arrays.binarySearch(boss, workers[j] + workers[j2] + 1);
    if(index > -1) {

    //找到以后跟老板换黄金

    //第一段黄金给老板
    int temp = workers[j];
    workers[j] = boss[index];
    boss[index] = temp;

    //第二段黄金给老板
    for (int k = 0; k < boss.length; k++) {
    if(boss[k] == 0) {
    temp = boss[k];
    boss[k] = workers[j2];
    workers[j2] = temp;
    }
    }
    break;
    }
    }
    }
    }
    out(i, boss, workers);
    }

    }

    private static void out(int day, int[] boss, int[] workers) {
    day += 1;
    System.out.println("第" + day + "天发工资");
    System.out.print("老板现有工资: ");
    for (int i = 0; i < boss.length; i++) {
    if(boss[i] > 0) {
    System.out.print(boss[i] + "/" + 7 + ", ");
    }
    }
    System.out.println();

    System.out.print("工人现有工资: ");
    for (int i = 0; i < workers.length; i++) {
    if(workers[i] > 0) {
    System.out.print(workers[i] + "/" + 7 + ", ");
    }
    }
    System.out.println(); }
    }