逻辑题

村庄里有三个人,Advik、Bardia和Cherry,他们可能是人类或狼人。Advik声称至少一人是狼人,Bardia说至少一人是人类,Cherry说恰好两人是狼人。要找出哪句话肯定为真,需要分析他们的话与狼人说谎的规则之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个村子里有三个居民,他们或者是人类或者是狼人,他们约定人类总是说真话,而狼人总是说假话。
Advik说:“我们三个中至少有一个是狼人。”
Bardia说:“我们三个中至少有一个是人类。”
Cherry说:“我们三个中恰好有两个狼人。”
那么以下六句中哪个肯定是真的?
只有Advik是狼人
只有Bardia是狼人
只有Cherry是狼人
他们中有两个狼人
他们三个都是狼人
他们中没有狼人

#include <stdio.h> 
int fun1(int a,int b,int c) 
{  
	int flag = 1;  
	if (a == 0)  
	{   
		if (b + c ==0)   
		{
			flag = 0;    
			return 0;   
		}  
	}  
	else   
		return 0;  
	if (flag == 1)   
		return 1; 
} 
int fun2(int a, int b,int c) 
{  
	if (b == 0)   
		return 1;  
	else  
	{   
		if (a + c == 2)    
			return 0;   
		else    
			return 1;
	} 
} 
int fun3(int a, int b, int c) 
{  
	if (c == 0)  
	{    
		if (a + b != 2)    
			return 0;   
		else    
			return 1;  
	}  
	if (c == 1)  
	{    
		if (a + b == 1)    
			return 0;
		else    
			return 1;  
	} 
} 
int main()
{  
	/*a=1,A是狼人,同理推b,c*/  
	int a, b, c;  
	for (a = 0; a <= 1; a++) {
		for (b = 0; b <= 1; b++)   {    
			for (c = 0; c <= 1; c++)    {     
				if (fun1(a, b, c) && fun2(a, b, c) && fun3(a, b, c))
				{
				     if (a == 0)       
				     	printf("Advik是居民\n");      
				     if (a == 1)
				     	printf("Advik是狼人\n");      
				     if (b == 0)       
				     	printf("Bardia是居民\n");      
				     if (b == 1)       
				     	printf("Bardia是狼人\n");      
				     if (c == 0)       
				     	printf("Cherry是居民\n");      
				     if (c == 1)       
				     	printf("Cherry是狼人\n");     
				}    
			}   
		}  
	} 
}

这个代码可以简化,然而我懒得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值