-5

最も近い9に切り上げる単純で非効率的な方法を作成しました。これが私が持っているものです

private int getInventorySize(int max) {
    if (max <= 9){
        return 9;
    }else if (max <= 18){
        return 18;
    }else if (max <= 27){
        return 27;
    }else if (max <= 36){
        return 36;
    }else if (max <= 45){
        return 45;
    }else if (max <= 54){
        return 54;
    }else{
        return 54;
    }

しかし、この方法はこれを行うための最良の方法ではないことがわかるように、誰かがこれを効率的な方法で行うための例を投稿できますか、PS. int max が 54 より大きい場合は、54 を返す必要があります。ありがとうございます。

4

8 に答える 8

4

できるよ:

private int getInventorySize(int max) {
    if (max <= 0) return 9;
    int quotient = (int)Math.ceil(max / 9.0);
    return quotient > 5 ? 54: quotient * 9;
}

で数を割り9.0ます。天井を取ると、次の積分商が得られます。商が> 5の場合、単純に を返し54ます。そうでない場合、その商quotient * 9の倍数が得られます9

いくつかのテストケース:

// Negative number and 0
System.out.println(getInventorySize(-1));  // 9
System.out.println(getInventorySize(0));   // 9

// max <= 9
System.out.println(getInventorySize(5));   // 9
System.out.println(getInventorySize(9));   // 9

// some middle case 
System.out.println(getInventorySize(43));  // 45

// max >= 54
System.out.println(getInventorySize(54));  // 54
System.out.println(getInventorySize(55));  // 54
于 2013-10-04T05:20:21.713 に答える
1

mod オペレーターを調べます。型付けされ%、長い除算演算の残りを生成します。

残りがあれば、丸めを大幅に簡素化できます。単純な if ステートメントで切り上げまたは切り捨てが必要かどうかがわかります。次に、切り上げまたは切り捨てが必要な 9 の倍数を調べる/は、演算子で除算 (整数除算のみ) してから再度乗算します。

于 2013-10-04T05:20:39.200 に答える
0
private int getInventorySize(int max) {
    if (max < 9) {
        return 9;
    }
    if (max <= 54 && max > 9) {
        int a = max / 9;
        return a * 9;
    } else
        return 54;
}
于 2013-10-04T05:59:31.037 に答える
0
private int getInventorySize (int max) {
    if (max < 9) return 9;
    for (int i = 9; i <= 54; i += 9) {
        if (max <= i) {
            return i;
        }
    }
    return 54;
}
于 2013-10-04T05:21:44.660 に答える