c語言訓練題:關於張三李四王五說謊的問題(此處用javascript實現)


  (第一篇博文)

    今天在一個交流群里見他們無聊,然后找到之前收藏的一些c語言題目放出去想讓他們做,結果反倒是自己不會做,於是花了很多時間去想。

  原題:張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。現在問:這三人中到底誰說的是真話,誰說的是假話?

  其實問題本身並不難,只是一開始想多了,陷入死循環。

  那這個問題的突破口在哪里呢?

  不管誰說謊,每個人都有兩個狀態  真和假

  由此,我們就可以確定,我們有循環嵌套:

  for(var zhangsan=0;zhangsan<=1;zhangsan++)
{
 for(var lisi=0;lisi<=1;lisi++)
 {
  for(var wangwu=0;wangwu<=1;wangwu++)
  {
} } }

  這時候,我們只要對zhangsan lisi  wangwu  這三個變量進行邏輯判斷即可

  邏輯怎么判斷呢?

  根據題目,我們一段一段的分析:

  張三說李四在說謊  : 假設zhangsan 就是正確的,那么有   zhangsan == !lisi

  李四說王五在說謊  :同理,有 lisi == !wangwu

  王五說張三和李四都在說謊 : 有  wangwu ==((!zhangsan)&&(!lisi))

  

  根據數學帶入解方程的方法,我們其中的兩個兩個相互代入,得到兩個式子,得到:

  zhangsan == wangwu

  lisi ==((!zhangsan)&&(!lisi))

  那我們的結果只要符合上邊兩個要求即可:

  

  if((zhangsan == wangwu)&&(lisi ==((!zhangsan)&&(!lisi))))

  

最后的結果:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
for(var zhangsan=0;zhangsan<=1;zhangsan++)
{
    for(var lisi=0;lisi<=1;lisi++)
    {
        for(var wangwu=0;wangwu<=1;wangwu++)
        {
            if((zhangsan==((!zhangsan)&&(!lisi)))&&(zhangsan==wangwu))
            alert("張三:"+zhangsan+"  李四:"+lisi+"  王五:"+wangwu);
        }
    }
}

</script>


ps:雖然說現在做些網站和寫些小軟件是沒問題的,但是由於c#  和 java 都是高級的語言,而且實際使用的時候也很少要這樣判斷邏輯的,

很久不做這些,腦子真的會生銹的。

 

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM