1. 程式人生 > >1089 狼人殺-簡單版 (20 分) C語言

1089 狼人殺-簡單版 (20 分) C語言

1089 狼人殺-簡單版 (20 分)

#include<stdio.h>

int main()
{
    int n;
	scanf("%d", &n);
	int wj[n];
	int w1=0,w2=0;  //全域性變數在沒有賦值以前系統預設為0,而區域性變數在沒有賦值以前的值是不確定的,所以有兩個選擇,1.全域性變數;2.區域性變數賦初值
	for(int i=1;i<=n;i++)
	{
		scanf("%d", &wj[i]); //輸入玩家說的話 
	}
	//假設有兩個狼人i,j 
	for(int i=1;i<=n;i++)
	{
		
		for(int j=i+1;j<=n;j++)
		{ 
		    int pl=0, wl=0; //統計好人和兩人說謊
			//遍歷每個人說的話,判斷其是否說謊 
			for(int k=1;k<=n;k++)
			{
			   
				//如果玩家k說的話小於0,則wj[k]為狼人,如果這個狼人不是i也不是j,則說明是謊話;
				//如果大於0,說明這個人是好人,如果wj[k]是 i或者j中的一個,說明是謊話 
				if((wj[k] < 0 && -wj[k] != i && -wj[k] !=j) || (wj[k] > 0 && (wj[k] == i || wj[k] == j)))
				{
					//k說謊了,如果k不是狼人,則好人說謊加1,否則狼人說謊+1 
					if(k != i && k != j)  pl++;
					else wl++; 
				}
			}
			if(pl == 1 && wl == 1)
			{
				w1 = i;
				w2 = j;
				break;
			} 
		}
		if(w1!=0) break;
	}
	if(w1!=0) printf("%d %d", w1, w2);
	else printf("No Solution");
}