我无法解决与分数和加分有关的数学问题

时间:2019-07-14 06:59:14

标签: javascript

我正在努力解决的数学问题说:

有一个数字是起点。我们需要创建一个程序,计算添加到分数中的奖励积分+得分的总积分+奖励。

如果起点(分数)小于或等于100,则奖励积分为5。 如果分数大于100,则奖金为分数的20%。 如果分数大于1000,则奖金为分数的10%。

其他奖励积分(必须与以前的奖励积分分开添加): 如果分数是偶数-> +1分 如果分数以5-> + 2分结束

export class AuthGuard implements CanActivate {
  constructor(private auth: AuthService, private router: Router) { }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if (this.auth.isLoggedIn !== true) {
      window.alert('Test!')
      this.router.navigate(['sign-in'])
    }
    return true;
  }
}

当我将20用作参数时,我希望得到的结果是6的奖金和26的总积分。

1 个答案:

答案 0 :(得分:1)

主要问题是您试图使用空的else子句,但实际上发生的是,其后的语句成为该else块的一部分。

这是您选择不使用分号结束语句的结果(总是很危险!)。如果您将分号放在最后一个else之后,就不会有此问题。

第二,您的if条件序列将意味着奖金将永远不会变成0.20 * score,因为大于1000的分数最终会出现在score > 100情况下。

实际上,一旦代码执行到那里,条件score > 100就永远是正确的,因为那时候肯定score <= 100是不正确的。

这是一个更正:

function solve(input) {
    let score = Number(input.shift());
    let bonus;

    if (score <= 100) {
        bonus = 5;
    } else if (score < 1000) {
        bonus = 0.20 * score;
    } else { // certain that score >= 1000
        bonus = 0.10 * score;
    }

    if (score % 2 === 0) {
        bonus = bonus + 1;
    } else if (score % 10 === 5) {
        bonus = bonus + 2;
    }

    return score + bonus;
}

console.log(solve([101]));

请注意,您可以使用三元运算符来使其更紧凑。 score % 2 === 0也是恰好应加的奇数奖励({放在算术表达式中的true变为1)。

这会降低可读性,所以也许您不愿意这样做:

function solve(input) {
    let score = Number(input.shift());

    return score 
        + ( score <= 100 ? 5
          : (score < 1000 ? 0.20 : 0.10) * score )
        + (score % 2 === 0) 
        + (score % 10 === 5) * 2;
}

console.log(solve([101]));