题意:

有n个玩家,有两个狼人,有两人说慌(其中一个为狼人一个为非狼人),找出狼人是谁?

题解:

暴力枚举
先枚举i和j为狼人,然后从1号开始假设其说谎,然后判断是否符合题目要求

代码:

#include<stdio.h>
#define maxn 110
int wolf[maxn],st[maxn];
int N;
 
int main(){
   
    int i,j,k;
    int w,lair;
    scanf("%d",&N);
    for(i=1;i<=N;i++){
   
        scanf("%d",&st[i]);
    }
    for(i=1;i<N;i++){
   
        wolf[i]=1;
        for(j=i+1;j<=N;j++){
   
            wolf[j]=1;
            w=0;
            lair=0;
            for(k=1;k<=N;k++){
   
            	int seer=st[k];
                if(seer>0&&wolf[seer]==1){
   //k说seer是好人,但seer是狼,k就说谎了 
                    lair++;
                    if(k==i||k==j)
					{
   
                        w++;
                    }
                }
				else if(seer<0&&wolf[-seer]==0)//k说seer是狼,但seer不是狼,k就说谎了 
				{
   
                    lair++;
                    if(k==i||k==j){
   
                        w++;
                    }
                }
            }
            if(lair==2&&w==1){
   //两个说谎的且一个为狼 
                printf("%d %d\n",i,j);
                return 0;
            }
            wolf[j]=0;
        }
        wolf[i]=0;
    }
    printf("No Solution\n");
    return 0;
}