穷举法解决逻辑问题

穷举法解决逻辑问题
公安人员抓捕了四个盗窃嫌疑犯,下面是他们的审讯记录:
A:是B偷的,不是D偷的
B:我没有偷,是C偷的
C说:A没有偷,是B偷的
D:我没有偷
现已经确切知道只有一人参与偷窃,且四人的话语要么全是真话,要么全在撒谎。
请根据这些条件编程判断谁是小偷?

package  com.heyang;

public   class  WhoIsTheThief {
  
public static void main(String[] args){
    
int[] arr=new int[4]; 
    
    
for(arr[0]=0;arr[0]<=1;arr[0]++){
      
for(arr[1]=0;arr[1]<=1;arr[1]++){
        
for(arr[2]=0;arr[2]<=1;arr[2]++){
          
for(arr[3]=0;arr[3]<=1;arr[3]++){           
            
// 只有一个人是小偷
            if(hasOnlyOneThief(arr)==false){
              
continue;
            }

            
            
boolean wordByA=(arr[1]==1 && arr[3]==0);
            
boolean wordByB=(arr[1]==0 && arr[2]==1);
            
boolean wordByC=(arr[0]==0 && arr[1]==1);
            
boolean wordByD=(arr[3]==0);
            
            
boolean resultFinal=allTrueOrAllFalse(wordByA,wordByB,wordByC,wordByD);
            
            
if(resultFinal==false){
              printThief(arr);              
              
return;
            }

          }

        }

      }

    }

  }

  
  
private static boolean hasOnlyOneThief(int[] arr){
    
int thiefCount=0;
    
    
for(int i:arr){
      thiefCount
+=i;
    }

    
    
return thiefCount==1;
  }

  
  
private static boolean allTrueOrAllFalse(boolean wordByA,boolean wordByB,boolean wordByC,boolean wordByD){
    
if(wordByA==true && wordByB==true && wordByC==true && wordByD==true){
      
return true;
    }

    
else if(wordByA==false && wordByB==false && wordByC==false && wordByD==false){
      
return true;
    }

    
else{
      
return false;
    }

  }

  
  
private static void printThief(int[] arr){
    
char[] arrNames={'A','B','C','D'};  
    
    
for(int i=0;i<arr.length;i++){
      
if(arr[i]==i){
        System.out.println(arrNames[i]
+"是窃贼");
      }

      
else{
        System.out.println(arrNames[i]
+"不是窃贼");
      }

    }
 
  }

}

你可能感兴趣的:(穷举法解决逻辑问题)