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