首页 > 解决方案 > 编写以下 c++ 代码的更短方法(if-else)

问题描述

我需要知道是否有更好/更短的方法来用 C++ 编写以下代码。(在通过主 if-else(逐步)时,将添加对变量 'y' 的额外检查)

int x = 5, y = 4;        

if(x == 1){
  if(y == 1)
      printf("ok");
  else
      printf("not ok");
}
else if(x == 2){
  if((y == 1) || (y == 2))
      printf("ok");
  else
      printf("not ok");
}
else{
  if((y == 1) || (y == 2) || (y == 3))
      printf("ok");
  else
      printf("not ok");
}

标签: c++if-statementoptimizationlogic

解决方案


if(0<y && y<4 && (y<=x || x<1))
    printf("ok");
else
    printf("not ok");

@Christophe你是对的,解释可能会有所帮助:

int x = 5, y = 4;        

if(x == 1){
  if(y == 1)
      printf("ok");
  else
      printf("not ok");
}
else if(x == 2){
  if((y == 1) || (y == 2))
      printf("ok");
  else
      printf("not ok");
}
else{
  if((y == 1) || (y == 2) || (y == 3))
      printf("ok");
  else
      printf("not ok");
}

当'printf("ok");' 被执行,'(y == 1) || (y == 2) || (y == 3)' 必须是'true'。

'x' 和 'y' 是整数意味着:

'(y == 1) || (y == 2) || (y == 3)' 等价于 '0<y && y<4',因为 '0<y' 是 'true',当 'y' 是其中之一 {1,2,3,4,.. .} 和 'y<4' 是 'true',当 'y' 是其中之一 {3,2,1,0,-1,-2,...} 和 '0<y && y<4'是“真”意味着:“y”是其中之一 {1,2,3}。

当你写:

if(0<y && y<4)
    printf("ok");
else
    printf("not ok");

如果你进入这个分支,会有太多的“好的”:

if(x == 1){
  ...
}

或进入这个:

else if(x == 2){
  ...
}

当你进入其中一个分支时,在两个分支中,'1<=x' 为'true'。

这意味着:如果 'x<1'(相当于 '!(1<=x)')为 'true',您将不会进入其中之一。

当你写:

if(0<y && y<4 && x<1)
    printf("ok");
else
    printf("not ok");

当 'x' 是其中之一 {1,2,3,4,5,...} 并且 'y' 是正确的时,会有太多的 'not ok'。

  1. 'x' 为 1:'0<y && y<4' 必须为 'true' 才能获得 'ok',但 'x<1' 将是 'false'!
  2. 'x' 为 2:'0<y && y<4' 必须为 'true' 才能获得 'ok',但 'x<1' 将是 'false'!。
  3. 'x' 为 3 或更大:'0<y && y<4' 必须为 'true' 才能表示 'ok',但 'x<1' 将是 'false'!。

对于 1. 和 2. '0<y && y<4' 太多了(想想等价 'y==1 || y==2 || y==3'),但两者都是 'true ' 和 'x<1' 是 'false',但必须有类似 '(... || x<1)' 的东西,而这个 '...' 必须确保:

  1. 'y' 为 1,当 'x' 为 1 并且
  2. 'y' 为 1 或 'y' 为 2,当 'x' 为 2 并且
  3. 当“x”为 3 或更大时,“y”为 1 或“y”为 2 或“y”为 3。

为 1。'x' 为 1:'y<=1'

对于 2. 'x' 是 2: 'y<=2' 在这两种情况下,'y<=x' 都是正确的。

对于 3。'x' 为 3 或更大:'y<=x' 将始终为 'true',当 'y' 正确时 ('y==1 || y==2 || y==3') .

你得到了答案。


推荐阅读