zoukankan      html  css  js  c++  java
  • 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 都是高级的语言,而且实际使用的时候也很少要这样判断逻辑的,

    很久不做这些,脑子真的会生锈的。

      

      

  • 相关阅读:
    Qt5."Clang Code Model"一些设置
    基于element表格的合并多个行实例
    vue中,基于echarts 地图实现一个人才回流的大数据展示效果
    vue2.0 子组件props接受父组件传递的值,能不能修改的问题整理
    vue调用组件,组件回调给data中的数组赋值,报错Invalid prop type check failed for prop value. Expecte
    vue,基于element的tree组件封装
    vue父子组件相互传值的实例
    基于vant实现一个问卷调查
    css3实现倾斜转动的转盘
    0801 am使用tp框架对数据库增删改查
  • 原文地址:https://www.cnblogs.com/mengtree/p/5251946.html
Copyright © 2011-2022 走看看