1

正如我在说明中提到的,除了有效性检查/变量保护检查之外,我需要在不使用任何 if 语句的情况下编写此函数。但是我无法确定我的代码是否符合这个规范。如果我的代码不起作用,我将如何在不使用禁止的 if 语句的情况下编写它?

这是问题所在: 在此处输入图像描述

这是我的代码:

int badgePoly(int x, int y) {
   int mavenbadge, incirclebadge, herobadge, weatherbadge, inquattrobadge,
      bronzebadges, polybadge;

   if ((x >= 1 && x <= 20) && (y >= 1 && y <= 20)) {
      mavenbadge = badgeBoundaryMaven(x, y);     
      incirclebadge = badgeInnerCircle(x, y); 
      herobadge = badgeLocalHero(x, y);
      weatherbadge = badgeBoringWeather(x, y); 
      inquattrobadge = badgeInQuattro(x, y); 
      bronzebadges = mavenbadge + incirclebadge + herobadge + weatherbadge +
         inquattrobadge;   
      if (bronzebadges >= 2) {
         polybadge = 1;
      }
      else {
         polybadge = 0;
      }
   }
   else {
      polybadge = -1;
   }

   return polybadge;
}

注意:mavenbadge、incirclebadge、herobadge、weatherbadge 和 inquattrobadge 是您可以在一个领域 (x, y) 获得的所有不同类型的青铜徽章;而青铜徽章只是所有这些的总和,以找到字段 (x, y) 中的青铜徽章总数。

4

2 回答 2

5

这很简单。替换这个:

if (bronzebadges >= 2) {
    polybadge = 1;
} else {
    polybadge = 0;
}

有了这个:

polybadge = (bronzebadges >= 2);

现在,显然如果其中一个badgeXXX函数使用 if 语句,您需要做更多的事情,但如果没有代码,我无法帮助您。

于 2013-10-24T07:32:26.993 回答
0

不使用比较运算符:

polybadge = !!(bronzebadges & ~1);

nightcracker 的版本虽然更理智。

于 2013-10-24T07:41:04.950 回答