题意:
有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;
}