或许可以把num = num >> 1注释掉 然后把EIGHT_BAG = 8改成4, 把SiX_BAG = 6改成3
还有一些判断我不知道是不是必须的,引用一句名言:I don't know why, but this works!
public class BuySomeOrange {
private static final int EIGHT_BAG = 8;
private static final int SiX_BAG = 6;
//use to identify how many eight and six are we using
//1 for eight, 0 for six
private static StringBuilder strBuilder = new StringBuilder("");
public static void main(String[] args) {
System.out.println(packOrangeFOrE(14) + "\t" + strBuilder.toString());
}
public static int packOrangeFOrE(int num) {
int sixBag, eightBag;
if(num % 2 != 0 || num <= 0)
return -1;
//
num = num >> 1;
//first we would like to use the bigger bag
if(num % EIGHT_BAG == 0) {
eightBag = num / EIGHT_BAG;
zeroOrOnes(eightBag, 0);
return eightBag;
}else if(num % SiX_BAG == 0) {
//we would like to use the bigger bag
int sixEvenDistribute = num % EIGHT_BAG;
if(sixEvenDistribute % SiX_BAG == 0) {
eightBag = num / EIGHT_BAG;
sixBag = (num % EIGHT_BAG) / SiX_BAG;
zeroOrOnes(eightBag, sixBag);
return eightBag + sixBag;
}
//if ends here we just use 6 bag
sixBag = num / SiX_BAG;
zeroOrOnes(0, sixBag);
return sixBag;
}else if(num % EIGHT_BAG % SiX_BAG == 0) {
eightBag = num / EIGHT_BAG;
sixBag = (num % EIGHT_BAG) / SiX_BAG;
zeroOrOnes(eightBag, sixBag);
return eightBag +sixBag;
}else {
return -1;
}
}
private static void zeroOrOnes(int eightNum, int sixNum) {
for(int i = 0; i < eightNum; i++)
strBuilder.append("1");
for(int i = 0; i < sixNum; i++)
strBuilder.append("0");
}
}