JAVA趣味逻辑算法

/**已知4位同学中的一位数学考了100分,当小李询问这4位是谁考了100分时,4个人的回答如下: A说:不是我。 B说:是C C说:是D。 D说:他胡说。 

已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出考100分的人。
* */

思路:四个人先假设第一个人考了100分,然后此时判断是否存在三人说真话,如果存在就就是该人,依次对四个人进行判断。

public class Main {
    public static void main(String[] args) {
        char thisman;
        char k;
        int n=0;
        for (k = 'A';k<='D'; k++) {
            thisman=k;
            n=(((thisman!='A')?1:0)+((thisman=='C')?1:0)+((thisman=='D')?1:0)+((thisman!='D')?1:0));
            System.out.println(n);
            if(n==3){
                System.out.println("100分为:"+thisman);
                break;
            }
        }
        if(k>'D')
            System.out.println("无解");
        
    }
}

/*甲说:―乙没有偷,是丁偷的。‖ 乙说:―我没有偷,是丙偷的。‖ 丙说:―甲没有偷,是乙偷的。‖ 丁说:―我没有偷‖
* 请根据这四人的谈话判断谁是盗窃者?

思路:共有四人发表观点,假设第i个人为盗贼,将其设置为1,其余三人设置为0,然后判断四个条件是否成立,从而确定第几个人是盗贼。

这里假设A、B、C、D代表四个人,变量值为1代表该人是盗贼。

public class pra1 {
    public static void main(String[] args) {
        int arr[] = new int[4];
        for (int i = 0; i < 4; i++) {//假设第i个人为盗贼
            for (int j = 0; j < 4; j++) {//将盗贼设置为1,其余设置为0
                if (j==i)
                    arr[j]=1;
                else 
                    arr[j]=0;
            }
            if (arr[3]+arr[1]==1&&arr[1]+arr[2]==1&& arr[0]+arr[1]==1) {//判断条件是否成立
                for (int m = 0; m < arr.length; m++) {
                    if (arr[m]==1) 
                        System.out.printf("%c",m+'A');
                }
            }
        }
    }
}

 

posted @ 2017-04-07 18:07  行动派  阅读(471)  评论(0编辑  收藏  举报