一个老板 给工人一段金条 让工人工作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/7
第二天 用手里的 1/7 换 2/7 那段
第三天 拿 1/7
第四天 用 手里的 1/7 和 2/7 换 4/7 那段
第五天 拿 1/7
第六天 用 手里的 1/7 换 2/7 哪段
第7天 拿 1/7
我想问下 如果我这个题目写成代码 都要用到什么算法 不需要写好的代码 告诉我下大致思路就行 谢谢大牛们
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));
}
}
}
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(); }
}