这里直接将 killer 变量命名为 'a' 'b' 'c',再用所给条件进行判断。
注意这里的for循环条件部分的运用。
参考代码:
#include<stdio.h>
int main()
{
char killer = 0;
int a = 'a';
//分别假设凶手是a,b,c,d,看谁是凶手时满足3个人说了真话,一个人说了假话
for (killer = 'a'; killer <= 'd'; killer++)
{
if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
printf("凶手是:%c", killer);
}
return 0;
}
自写代码:
#include <stdlib.h>
#include <time.h>
void set_ret(int* p)
{
int r = rand() % 4;
*(p + r) = 1;
for (int i = 0; i < 4 && i != r; i++)
{
*(p + i) = 0;
}
}
int main()
{
int arr[4] = { 0 };
srand((unsigned int)time(NULL));
while (1)
{
set_ret(arr);
if (((arr[0] == 0) +
(arr[2] == 1) +
(arr[3] == 1) +
(arr[3] == 0)) == 3)
{
break;
}
}
for (int i = 0; i < 4; i++)
{
if (arr[i] == 1)
{
printf("%d\n", i+1);
break;
}
}
return 0;
}