c++离散数学,命题逻辑应用

实在不会
实验内容
三个问题:已知A,B,C,三人是小学,各教两门课,互不重复,共有如下六门课。语文(Chinese)、数学(Math)、政治(Politics)、地理(Geography)、音乐(Music)和美术(Art),已经知道:
– 政治和数学是邻居 – 地理比语文年龄大 – B最年轻 – A 经常给地理和数学讲他看过的文学作品 – B 经常和音乐、语文一起游泳 要求:编程判断A,B,C各教哪门课。
实验原理和方法
(1)变量的存储:
总的有六门课程(可定义char course[6][10] = {"Chinese","Math","Politics","Geography","Music","Art"},设置六个char元素的数组表示教这六门课程的,如,如果x[2]='A'表示A教政治。
(2)表达式:
可以根据题目给出的条件写出条件表达式,例如其中的两个条件表示如下:政治和数学是邻居: A经常给地理和数学讲他看过的文学作品:(x[3]!='A')&&(x[1]!='A') 另外,还有一个暗含的条件:每个只能教2门课。
输入格式:
输入教师的名称字符,如
A
输出格式:
输出该教师所上的课程,如A教师上语文和政治,则输出:
A is Chinese
A is Politics
输入样例:
在这里给出一组输入。例如:
A
输出样例:
在这里给出相应的输出。例如:
A is Chinese
A is Politics
程序实例

#include <iostream>
using namespace std;

int main()
{
    char course[6][10] = { "Chinese","Math","Politics","Geography","Music","Art" };
    char x[6], y[6];
    char tc[3] = { 'A','B','C' };
    //在下面的begin-end之间填入代码,完成程序的功能
    //*************begin***********************************//
    
    //**************end***********************************//

    return 0;
}

#include <iostream>  
#include <string>  
using namespace std;  
  
const int MAXN = 6;  
  
int n, m;  
char course[MAXN][10];  
  
bool check(int x, int y) {  
    return x >= 0 && x < n && y >= 0 && y < m && course[x][y] != '\0';  
}  
  
bool check_neighbor(int x, int y) {  
    return check(x, y + 1) && check(x, y - 1) && check(x, y);  
}  
  
bool check_age(int age) {  
    return age >= 0 && age < m;  
}  
  
bool check_interest(int interest) {  
    return interest >= 0 && interest < m;  
}  
  
bool check_occupation(int occupation) {  
    return occupation >= 0 && occupation < m;  
}  
  
bool check_relation(int relation) {  
    return relation >= 0 && relation < m;  
}  
  
bool check_room(int room) {  
    return room >= 0 && room < m;  
}  
  
bool check_courses() {  
    bool flag = true;  
    for (int i = 0; i < n; i++) {  
        if (check_neighbor(i, 0) && check_neighbor(i, 1) && check_neighbor(i, 2)) {  
            flag = false;  
            break;  
        }  
    }  
    return flag;  
}  
  
bool check_exam() {  
    bool flag = true;  
    for (int i = 0; i < n; i++) {  
        if (check_neighbor(i, 0) && check_neighbor(i, 1) && check_neighbor(i, 2) && check_age(i)) {  
            flag = false;  
            break;