gpt4 book ai didi

java - 数组上的算法优化

转载 作者:行者123 更新时间:2023-12-01 19:44:53 26 4
gpt4 key购买 nike

我正在编写一个算法,如果客户列表要支付电影费用并收到找零(钱),则该算法应该返回"is",考虑到店员在空收银员暂停的情况下开始接收付款,这意味着他无法找零从头开始。电影售价 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";
}

现在它可以工作,但并不完美,我如何改进此代码,以便它检查处理大多数情况,忽略客户少于 25 的情况。客户必须在 {25, 50, 范围内提供 25 的倍数, 100}问题是如何使这段代码更好,我希望有一个示例代码和解释基本上

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";
}

关于java - 数组上的算法优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com