Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阵列优化算法_Java - Fatal编程技术网

Java 阵列优化算法

Java 阵列优化算法,java,Java,我正在编写一个算法,如果一个客户列表要为一部电影付费并收到找零(钱),那么该算法应该返回“是”,考虑到职员开始收到付款时,出纳停顿了一下,这意味着他不能从一开始就给钱。电影费用为25美元,因此,如果客户有50美元,店员必须拒绝,除非他已经从前一位客户那里收到25美元,以便能够将其作为下一位客户的零钱 我有这样的算法 public static String Tickets(int[] peopleInLine) { int sumOfMoneyWithCashier = 0;

我正在编写一个算法,如果一个客户列表要为一部电影付费并收到找零(钱),那么该算法应该返回“是”,考虑到职员开始收到付款时,出纳停顿了一下,这意味着他不能从一开始就给钱。电影费用为25美元,因此,如果客户有50美元,店员必须拒绝,除非他已经从前一位客户那里收到25美元,以便能够将其作为下一位客户的零钱

我有这样的算法

public static String Tickets(int[] peopleInLine) {

    int sumOfMoneyWithCashier = 0;
    int cost = 25;

    for (int i = 0; i < peopleInLine.length; i++) {

        if (peopleInLine[i] == cost) {
            sumOfMoneyWithCashier += peopleInLine[i];
            if (peopleInLine[i + 1] == cost) {
                sumOfMoneyWithCashier += cost;
            } else if (peopleInLine[i + 1] > cost) {
                int change = peopleInLine[i + 1] - cost;
                if (sumOfMoneyWithCashier >= change) {
                    sumOfMoneyWithCashier -= change;
                } else {
                    System.out.println("no");
                    return "NO";
                }
            }
        } else if (peopleInLine[i] > cost) {
            int change = peopleInLine[i] - cost;
            if (sumOfMoneyWithCashier >= change) {
                sumOfMoneyWithCashier -= change;
            } else {
                System.out.println("no");
                return "NO";
            }
        }

    }
    System.out.println("YES");
    return "YES";
}

这是一个简单的解决方案,可以解决您正在尝试做的事情,看看它是否适合您:)

publicstaticstringtickets(int[]peopleInLine){
int d25=0,d50=0;
for(intapeopleinline:peopleInLine){
如果(aPeopleInLine==25){
d25++;
}
如果(aPeopleInLine==50){
d25-;
d50++;
}
如果(aPeopleInLine==100){
如果(d50>0){
d50--;
d25-;
}否则{
d25-=3;
}
}
如果(d25<0){
返回“否”;
}
}
返回“是”;
}

这是一个简单的解决方案,可以解决您正在尝试的问题,看看它是否适合您:)

publicstaticstringtickets(int[]peopleInLine){
int d25=0,d50=0;
for(intapeopleinline:peopleInLine){
如果(aPeopleInLine==25){
d25++;
}
如果(aPeopleInLine==50){
d25-;
d50++;
}
如果(aPeopleInLine==100){
如果(d50>0){
d50--;
d25-;
}否则{
d25-=3;
}
}
如果(d25<0){
返回“否”;
}
}
返回“是”;
}

如何改进/使其更好是一个相当模糊的问题。如果你有一个特定的情况,当程序行为不当或给出错误的结果时,你可以用给定的输入和结果与预期结果的对比来解释这个情况(或多个情况)。好的,我从codewars.com获得了这个任务,所以它应该通过12个测试,目前它通过了10个测试,问题是codewars,com没有向您展示@JoakimDanielson(peopleInLine[i+1]==cost)使用的测试输入。我这样做是为了表示数组中的下一个元素@samzsakerzit这只是我获取数组中下一个值的方法@samzsakerzm可能不是最好的方法@samzsakerzm如何改进/使其更好是一个相当模糊的问题。如果你有一个特定的情况,当程序行为不当或给出错误的结果时,你可以用给定的输入和结果与预期结果的对比来解释这个情况(或多个情况)。好的,我从codewars.com获得了这个任务,所以它应该通过12个测试,目前它通过了10个测试,问题是codewars,com没有向您展示@JoakimDanielson(peopleInLine[i+1]==cost)使用的测试输入。我这样做是为了表示数组中的下一个元素@samzsakerzit这只是我获取数组中下一个值的方式@samzsakerzme可能不是@SamzSakerzyes的最佳方式它适用于所有情况,你能告诉我代码逻辑的错误吗@SamzSakerzyes它适用于所有情况,您能告诉我代码逻辑的错误吗@萨姆萨克兹
Line.Tickets(new int[] {25, 25, 50}) // => YES 
Line.Tickets(new int[]{25, 100}) // => NO. Vasya will not have enough money to give change to 100 dollars
Line.Tickets(new int[] {25, 25, 50, 50, 100}) // => NO. Vasya will not have the right bills to give 75 dollars of change (you can't make two bills of 25 from one of 50)
public static String Tickets(int[] peopleInLine) {
    int d25 = 0, d50 = 0;
    for (int aPeopleInLine : peopleInLine) {
        if (aPeopleInLine == 25){
            d25++;
        }
        if (aPeopleInLine == 50) {
            d25--;
            d50++;
        }
        if (aPeopleInLine == 100) {
            if (d50 > 0) {
                d50--;
                d25--;
            } else {
                d25 -= 3;
            }
        }
        if (d25 < 0){
            return "NO";
        }
    }
    return "YES";
}