或许可以把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");     } }
点赞 评论

相关推荐

牛客网
牛客企业服务