2010-10-20 29 views
0

下列参数给出:最少的代码,缩短表达

boolean a = true ; 
boolean b = false ; 
boolean c = true ; 

我想拥有这个版本最少的代码:

if ((a && ! b) || (! a && b)) { 
    z1 += 99 ; 
} 

if (a^b) { 
    z1 += 19 ; 
} 

if ((a && b) || (! a && ! b)) { 
    z1 += 118; 
} 

什么需要修改的?

+2

闻起来像作业... – 2010-10-20 09:20:40

+0

作业?你有a和b的值,所以你可以计算出哪些if子句是真的,因此z1会发生什么。如果你想要所有a/b的简化版本,那么我不知道你为什么给出的值... – 2010-10-20 09:20:58

回答

9

第一个条件是一样的第二个,第三个是别人的否定,所以我们有

if (a^b) { 
    z1 += 99 + 19 // = 118 
} else { 
    z1 += 118 
} 

我们可以再次缩短,不管a或b是,Z1是由118增加,所以我们只需要

z1 += 118 
+1

天哪!没有看到那个人来了! – Riduidel 2010-10-20 09:22:40

+0

代码应该与给定的任何a,b,c相同,所以第一个和第二个条件会不一样? – 2010-10-20 09:27:39

+0

做一个真相表,如果你不相信我,这两个条件是相同的无论a或b ... – Julien 2010-10-20 09:33:14

1
if ((a && ! b) || (! a && b)) { 
} 

可以使用

if (a!=b) { 
} 

if ((a && b) || (! a && ! b)) {} 

可以使用

if(a==b){} 

if (a^b) {} 

是在它的位置确定

2

如果你需要弄清楚这样的事情在未来,那么你可能想尝试写一个表(我认为它称为真值表,但有些在这里更具数学意义的人可能会纠正我)显示所有可能的英寸投入和他们各自的结果。一旦写完表格,您应该能够快速识别整体逻辑并可能将其简化。

对于上面的表格可能看起来像这样;

a | b | z1 
------------------ 
    t | t | 
    t | f | 
    f | t | 
    f | f | 

遍历每一行并在列中写入z1的效果。如果可能的话,这应该可以让您轻松确定发生了什么以及如何缩短它。