C 语言 杀人游戏

 杀人游戏

 有一道很有意思的题目,问题是这样的
、日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
刚看到这道题我的内心是崩溃的,根本看不懂  要怎么来写呢 !
但是当有一定的理解之后 ,就会发现这题是非常简单的,同时也是非常有意思的;

刚开始我写出的代码是这样的;

#define _CRT_SECURE_NO_WARNINGS1
#include<stdio.h>
#include<stdlib.h> 
int main()
{
   int  a = 0;//0 表示是凶手
   int  b = 0;
   int  c = 0;
   int  d = 0;
   int flag = 0;
   for(a = 0;a <= 1;a ++)
	{
		for(b = 0;b <= 1;b ++)
	   {
				for(c = 0;c <= 1;c ++)
			   {	
					for(d = 0;d <= 1;d ++)
					{
						int sum = (a ==1 ) +(c == 0)+ (d == 0)+(d == 1);
						int temp =(a == 1)+(b == 1)+(c == 1)+(d == 1);
						if(sum == 3 &&temp ==3)
						{	
						printf("a =%d\nb =%d\nc =%d\nd =%d\n",a,b,c,d);
						flag = 1;
						break;
						}
					}
				if(flag)
					break;
			  }
			if(flag)
				break;
		}
		if(flag)
			break;
					
	}
	if(flag)
	{
		if(0 ==a)
			printf("凶手是 A\n");
		else if(0 ==b) 
			printf("凶手是 B\n");
		else if(0 ==c) 
			printf("凶手是 C\n");
		else 
			printf("凶手是 D\n");
	  
	}
	else
		printf("没找到\n");
	
	

	system("pause");
	return 0;

}
这代码写的可能有点的繁琐 ;可能看不懂;
其实只要弄懂一点就很容易做对 。
那就是 四个人中三个人说的是正确的, 一个是错的 
所以可以写成这样 ,四个人说的加起来要等于三 

当然之后老师又给我们交了新的方法;
代码 是这样的
#define _CRT_SECURE_NO_WARNINGS1
#include<stdio.h>
#include<stdlib.h> 

int main()
{

	int killer = 'A';
	for(killer  = 'A';killer <= 'D'; killer ++ )
	{
		int num = 0;
		num = (killer != 'A')+(killer == 'C' )+(killer == 'D')+(killer != 'D');
		if(num ==3)
		{
		printf("killer = %c\n",killer);break;
		}
	}
	if(killer > 'D')
		printf("没找到凶手 \n");
	system("pause");
	return 0;


}
这代码看上去就十分的简单 ,每个人的写法都会不一样的 ,但原理是一样的。

 因此 ,只要明白一个程序的 原理写出来是肯定 ,但是看得就是谁写的更简单的;
所以应该这样好好思考 。

你可能感兴趣的:(C语言,杀人游戏)