黑马程序员技术交流社区

标题: 4人中有1人加入黑马程序员参加培训,班主任想知道是谁进... [打印本页]

作者: 杜工    时间: 2014-8-13 22:15
标题: 4人中有1人加入黑马程序员参加培训,班主任想知道是谁进...
本帖最后由 杜工 于 2014-8-14 19:25 编辑

4人中有1人加入黑马程序员参加培训,班主任想知道是谁?
A说:“不是我”;B说:“是C”;C说:“是D”;D说:“C胡说”。

已知4人中,3人说的是真话,一个人说的是假话。请同学们根据这些信息,

用java语言编程,找出真正的“黑马”!


作者: Imp_x    时间: 2014-8-13 22:19
果断是C   B、C说得属性一样  只看B、C  一分析容易得出C是黑马= =
作者: 杜工    时间: 2014-8-13 22:25
Imp_x 发表于 2014-8-13 22:19
果断是C   B、C说得属性一样  只看B、C  一分析容易得出C是黑马= =

大多数人都会分析,我想用代码写出来。
作者: Franklin    时间: 2014-8-13 22:31
太绕了啊。
作者: zhxu188    时间: 2014-8-13 22:45
这个题目可以看成是与不是,是就用等于号表示,不是就用不等于表示
1代表A   2代表B  3代表C   4代表D
A说不是我   所以用k!=1,
B说:是C    所以用k==3,
C说:是D    所以用k==4,
D说:胡说   所以用k!=4,

因为有3个人说真话,所以K最后相加为3



class Test
{
        public static void main(String[] args)
        {
                int k = 0;

                for(k=1;k<=4;k=k+1)
                      {                       
                          if(((k!=1)+(k==3)+(k==4)+(k!=4))==3)
                  {
                   System.out.println("做好事者为:"+char(64+k));       
          }
      }
        }
}
作者: zhxu188    时间: 2014-8-13 22:47
由于电脑没有java 就只能用记事本写了,写的比较匆忙,括号可能有问题,楼主自己改一改。
作者: 烟海    时间: 2014-8-13 22:47
zhxu188 发表于 2014-8-13 22:45
这个题目可以看成是与不是,是就用等于号表示,不是就用不等于表示
1代表A   2代表B  3代表C   4代表D
A说不 ...

没看懂 。。。。。。。。。
作者: java—family    时间: 2014-8-13 23:05
我说说思路吧:abcd四个人,有一个人说假话。那就分别假设  abcd为假。如果a为假,那么他就要满足后面3个人的话,如果不满足的话,就跳出这次循环,进行下一次循环。
作者: 舍我其谁    时间: 2014-8-13 23:07
zhxu188 发表于 2014-8-13 22:45
这个题目可以看成是与不是,是就用等于号表示,不是就用不等于表示
1代表A   2代表B  3代表C   4代表D
A说不 ...

if后面括号里没看明白是这么回事?
作者: inception    时间: 2014-8-13 23:08
一0是假话,1是真话  一 A:0  BCD:1 AB的话矛盾。二 B:0  ACD:1  CD的话矛盾。三 C:0  ABD:1  符合,黑马就是C。四 D:0  ABC:1  CD的话矛盾
作者: jw在路途    时间: 2014-8-13 23:30
是c,哈哈
作者: 象牙    时间: 2014-8-13 23:53
匆匆看了一眼,等明天的给你写出来......
作者: 我行我SHOW‰    时间: 2014-8-14 00:41
果断C,至于代码就没敲~~~~
作者: 马嘉    时间: 2014-8-14 08:56
太有才了
作者: Faith-    时间: 2014-8-14 09:49
zhxu188 发表于 2014-8-13 22:45
这个题目可以看成是与不是,是就用等于号表示,不是就用不等于表示
1代表A   2代表B  3代表C   4代表D
A说不 ...
  1. if(((k!=1)+(k==3)+(k==4)+(k!=4))==3)

  2. 请问这句什么意思?
复制代码

作者: Anyway    时间: 2014-8-14 09:56
有点意思。。
作者: 天黑偷牛    时间: 2014-8-14 10:05
zhxu188 发表于 2014-8-13 22:45
这个题目可以看成是与不是,是就用等于号表示,不是就用不等于表示
1代表A   2代表B  3代表C   4代表D
A说不 ...

这个分析的太到位了,厉害,厉害
作者: ↘ふ紫铯幽夢    时间: 2014-8-14 10:39
这题是C语言的 ,有点印象。。。。。。。。。。
作者: 周峰峰    时间: 2014-8-14 10:43
public class demo2 {

        /**
         *
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) {
                //定义int型k代表进黑马的人
             int k = 0;
             //弄一个循环,1、2、3、4分别对应A、B、C、D
         for(k=1;k<=4;k=k+1)
               {   
                 //做个判断,4个人中3个说真的,一个人说假的
                   if(writeBoolean(k!=1)+writeBoolean(k==3)+writeBoolean(k==4)+writeBoolean(k!=4)==3)
                   {
                           //把intx型的k转换成字母
                           System.out.println((char)(64+k));
                           }
                   }
         }
//定义一个方法把boolean型转换成int型
        public  static int writeBoolean(boolean b) {
                int i = 0;
                //true转换成1
                if(b==true){
                        i=1;
                //false转换成0
                }else if(b==false){
                        i=0;
                }
                return i;
                }
        }
作者: ↘ふ紫铯幽夢    时间: 2014-8-14 11:05
  1. public static int method(){
  2.                 int s,a,b,c,d;
  3.                 for(s = 'A';s<='D';s++){
  4.                         if(s != 'A')
  5.                                 a = 1;
  6.         else                        a = 0;
  7.                        
  8.                         if(s == 'C')
  9.                                 b = 1;
  10.         else                        b = 0;
  11.                        
  12.                         if(s == 'D')
  13.                                 c = 1;
  14.         else                        c = 0;
  15.                        
  16.                         if(s != 'D')
  17.                                 d = 1;
  18.         else                        d = 0;
  19.                        
  20.                         if((a+b+c+d) == 3){
  21.                                 System.out.println((char)s);
  22.                                 break;
  23.                         }
  24.                 }
  25.                
  26.                 return 0;
  27.         }
  28. }
复制代码
Java编程实现。。。。。。
作者: 君行    时间: 2014-8-14 11:43
都是。。。。。。                       
作者: F@C    时间: 2014-8-14 12:57
进来学习
作者: 不可言    时间: 2014-8-14 13:38
不明觉厉
作者: 杜工    时间: 2014-8-14 14:24
Faith- 发表于 2014-8-14 09:49

逻辑判断,说真话的值为1,说假话的值为0,有三个说真话,一个说假话,所以总和为3。
作者: Faith-    时间: 2014-8-14 14:59
杜工 发表于 2014-8-14 14:24
逻辑判断,说真话的值为1,说假话的值为0,有三个说真话,一个说假话,所以总和为3。 ...

哦  知道那个3是什么意思了   谢谢您的解释




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2