【问题标题】:How to reduce this if statement?如何减少这个if语句?
【发布时间】:2022-12-16 13:08:31
【问题描述】:
if(year%400==0 || (year%100!=0 && year%4==0)) 

声明的形式为a or (b' and c)

这会减少到 a or (b or c') 吗?

if(year%400==0 || (year%100==0 || year%4!=0))

这个减少有错误吗? (我认为这是正确的,但这两个并没有给出相同的结果。)

【问题讨论】:

  • 德摩根定律,这是一道数学题,不是C题。你试图解决的实际问题是什么?
  • 真值表可以让你轻松检查语句是否等价:en.wikipedia.org/wiki/Truth_table
  • 如果那是您真正要问的,那么这些并不相同。不相关,根据其定义,这里无论如何都没有“减少”。

标签: c if-statement


【解决方案1】:

这会减少到a or (b or c')吗?

不。


我们能够and 更改为 or

  b' and c
= ( b' and c )''
= ( b or c' )'

所以

a or ( b' and c )

成为

a or ( b or c' )'

没用。


我们可以使用相同的方法将 and 更改为 or

a or ( b' and c )

成为

( a' and ( b or c' ) )'

再次,没有用。


可以简化为year % 4 == 0,只要你只处理1901年到2099年。

【讨论】:

    【解决方案2】:

    考虑year = 100 的示例。您的第一个语句将返回 false,而第二个语句将返回 true。

    括号中的第二个or 语句不需要,因此可以将其视为对三个条件的简单检查。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 2018-02-11
      • 2016-09-09
      • 1970-01-01
      相关资源
      最近更新 更多