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