提问者:小点点

对于最少的移动次数,我们需要最大化我们加倍金钱的次数


如果你从1美元开始,每走一步,你可以把钱翻倍或者再加1美元,那么你必须走多少步才能达到n美元

我写了一些代码,但是看起来它在结束之前就停止了。 我想我需要另一个循环为else,但找不到解决方案。 有人能帮我调整代码吗? 如果可能的话,我不想要复杂的代码。

public class NumberOfMoves {

    public static void main(String[] args) {

        int n$ = 200; //target number of bucks

        int steps = 0;


        for (int i = 0; i < n$; i++) {
            if (n$ % 2 == 0) {    //if 200/2 equals even number than n$/2== this number
                n$ = n$ / 2;
                steps++;
                // System.out.println(n$);

            } else {
                n$ = n$ - 1;
                steps++;



            } // end else


        }// end loop
        System.out.println("Steps " + steps);


    } //end main


} //end class

共2个答案

匿名用户

您不知道何时应该退出for循环。 您正在减少n$,看起来应该在n$为1时立即停止。 那么i在做什么呢? 它正在计数,并将在n$达到1之前的某个时间点达到n$。 我认为循环应该是while(n$>1)

匿名用户

package sample;

class Main1 
{
    public static void main(String[] args) {

        int n$ = 200; //target number of bucks

        int steps = 0;


        while (n$>1) {
            if (n$ % 2 == 0) {    //if 200/2 equals even number than n$/2== this number
                n$ = n$ / 2;
                steps++;
                // System.out.println(n$);

            } else {
                n$ = n$ - 1;
                steps++;



            } // end else


        }// end loop
        System.out.println("Steps " + steps);


    } //end main


} //end class}

可以使用while代替for