这是一个赋值,我们不允许使用任何逻辑/关系/条件/位运算符/ loops / if / else语句。问题是罐内有三个孔,每个孔都有水流出。获取水箱中的总水量值,如果水箱中的水为200
加仑或更多,水从第3个洞以每分钟1.5
加仑出口,1.3
加仑/分钟从第2洞起,1.1
从第1洞开始。如果水位低于200加仑,水只从底部的两个孔排出。如果水位低于150加仑,水只会从井底流出。每分钟输出的总水量是多少?我们必须仅使用%
,/
,*
,+
,-
,=
运算符来解决此问题。我尝试了以下内容,
#define HoleOneRange 200
#define HoleTwoRange 150
#define HoleThreeRange 100
int WaterLevel,totalExiting;
totalExiting = ( (WaterLevel/HoleOneRange) * (HoleOneRange - WaterLevel * 1.5) )
但我还需要一个洞1和2的表达式,我无法弄清楚最后一个小时,任何帮助都会受到赞赏。感谢。
答案 0 :(得分:1)
虽然这个问题根据评论中提到的SO的精神并非根本,但这些问题非常普遍,因为当然是课程。
您的整个问题减少到比较数量是否大于或小于另一个数量。
假设水量为x
。
您想知道x >= 200
是否以
int y = x / 200;
现在y
0
如果是x < 200
,则为正数。
但理想情况下,我们希望它为{0, 1}
,以便我们可以简单地乘以费率并获得总费率。
所以我们这样做 -
float z = (float)y;
z = z / (z + 1);
现在如果y
为0,z也将为零。如果它是一个或多个,它将是一些数量不到一个。
现在你可以做到
float rate1 = RATE_FOR_HOLE * (int) (z * 2); // This is 1.1 if I understand correctly.
同样,你可以计算第二洞。对于第三洞,它总是1.5。加起来并返回。
修改:如果y为z
,则0.4999
成为0.5
而非1
的问题很小。要摆脱这种特殊情况,只需将y
乘以2
,就可以消除1
的情况。
演示:Ideone