第2题-【逻辑推论】

第2题-【逻辑推断】

/*
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:

(1)A参加时,B也参加;

(2)B和C只有一个人参加;

(3)C和D或者都参加,或者都不参加;

(4)D和E中至少有一个人参加;

(5)如果E参加,那么A和D也都参加。
*/

#include "iostream"
using namespace std;

#define MAX_ELE 5

int judge(int *arr)
{
int j1, j2, j3, j4, j5;
j1 = !arr[0] || arr[1];
j2 = (arr[1]&&!arr[2]) || (!arr[1]&&arr[2]);
j3 = (arr[2]&&arr[3]) || (!arr[2]&&!arr[3]);
j4 = arr[3] || arr[4];
j5 = !arr[4] || (arr[0]&&arr[3]);

return j1 && j2 && j3 && j4 && j5;
}

void solve(int *arr, int index)
{
if(index >= MAX_ELE)
{
if(judge(arr))
{
for(int iout=0; iout<MAX_ELE; iout++)
{
if(arr[iout])
{ printf("%c,", 'A'+iout); }
}
cout << "\b参加了比赛" << endl;
}
}
else
{
arr[index] = 0;
solve(arr, index+1);
arr[index] = 1;
solve(arr, index+1);
}
}

int main()
{
int arr[5] = {0};
solve(arr, 0);

return 0;
}