判断布尔变量3个中2个是true

我是祥子 发布于 2011/08/22 14:42
阅读 427
收藏 0

3个布尔变量a;b;c,如果其中2个是true,则返回true。

解决方法如下:

boolean atLeastTwo(boolean a, boolean b, boolean c) {
  if ((a && b) || (b && c) || (a && c)) {
    return true;
  } else {
    return false;
  }
}

朋友说这方法,还可以优化,不知还有何高见,OSC的朋友?

加载中
0
0xTang
0xTang
写法优化?
boolean atLeastTwo(boolean a, boolean b, boolean c) {
	return ((a && b) || (b && c) || (a && c))
}
0
微风_
return (a&&b) | (b&&c) | (a&&c)
0
RainJ
RainJ

1. return a ? b || c : b&&c

2. return (a || b && c) && (b || c)

0
firstrose
firstrose
return ((int)a+(int)b+(int)c)==2
mark35
mark35
如果楼主的意思是‘至少’两个true呢~
0
sam_ai
sam_ai
ls正解!c的bool本质都是int,类型转换么是编译器的事情,不浪费运行效率的
0
0xTang
0xTang

引用来自“firstrose”的答案

return ((int)a+(int)b+(int)c)==2
看LZ的方法名应该是 
return ((int)a+(int)b+(int)c)>=2
0
TrulyBelieve
TrulyBelieve

引用来自“firstrose”的答案

return ((int)a+(int)b+(int)c)==2

Java下行不通,没法编译

C++下也行不通,bool a= -1,bool b =-1, bool c = -1

0
Lunar_Lin
Lunar_Lin
return (!a+!b+!c)<=1;
0
Lunar_Lin
Lunar_Lin

分享个C++ 小技巧,2次取反   a=!!a;   快速将一个int类型 规范成一个bool类型.

0
TrulyBelieve
TrulyBelieve

对编译原理不是很熟,但我总觉的

return (!a+!b+!c)<=1 性能不会高于 return ((a && b) || (b && c) || (a && c))

前者需要6条指令,而后者未必用到6条指令(在a=true b=true的情况下)

返回顶部
顶部