由题意可得出:
A,B,C,D的值只能为1或0,可用四个for循环,判断条件为四人中只有一个凶手(凶手为1)且只能有三个1,一个0(三真一假)。
#include
#include
int main ()
{
int A=0;
int B=0;
int C=0;
int D=0;
for (A = 0; A < 2; A++)
{
for (B = 0; B <2 ; B++)
{
for (C = 0; C <2; C++)
{
for (D = 0; D <2; D++)
{
if (((A==0 && C==1 && D==1 && D==1) |\
(A==0 && C==1 && D==0 && D==0) |\
(A==0 && C==0 && D==1 && D==0) | \
(A==1 && C==1 && D==1 && D==0)) &&\
((A==1&&B==0&&C==0&&D==0)|(A==0&&B==1&&C==0&&D==0)|\
(A ==0&&B==0&&C==1&&D==0)|(A==0&&B==0&&C==0&&D==1)) )
//判断A,B,C,D,是否符合条件
printf ("A=%d, B=%d, C=%d, D=%d\n",A,B,C,D); 输出A,B,C,D的值
}
}
}
}
printf ("输出为1的是凶手\n"); 判断条件用1代表凶手
system ("pause");
return 0;
}
优化题意可得:
A,B,C,D只能等于0或1,所以用ascll码值来进行操作,如果一个值满足四个 条件且相加等于3符合三真一假,那么它对应的字符就是要找的
#include
#include
int main ()
{
int i=0;
char n;
for (i=1;i<5;i++)
{ n=64+i;
if(('A'!=n)+('C'==n)+('D'==n)+('D'!=n)==3) //判断A,B,C,D,是否符合条件
{
printf ("%c是凶手\n",n);
}
}
system ("pause");
return 0;
}
继续优化可得:
int main ()
{
char killer='A';
for (killer='A';killer<='D';killer++)
{
if ((killer!='A')+(killer=='C')+(killer=='D')+(killer!='D')==3)
printf ("%c is killer\n",killer);
}
system ("pause");
return 0;
}