A,B,C是小学教师,各教2门课,互不重复, 共有6门课:语文,算术,政治,地理,音乐和美术。请编程输出A B C各教哪两门课。

A,B,C是小学教师,各教2门课,互不重复, 共有6门课:语文,算术,政治,地理,音乐和美术。已知:
(1)政治老师和算术老师是邻居。
(2)地理老师比语文老师年龄大。
(3)B最年轻。
(4)A经常对地理老师和算术老师讲他看过的文学作品。
(5)B经常和音乐老师,语文老师一起游泳。
请编程输出A B C各教哪两门课。
思路:
政治和算术不是同一个人教的。
B不教地理。
A不教地理或算术。
地理和算术不是同一个人教的。
音乐和语文不是同一个人教的。
B不教音乐和语文。

语文算术政治地理音乐美术
A××
B×××
C

下面分类讨论:
由于B必教美术,所以B的组合可能是算术+美术或政治+美术
(1)若B教算术+美术

语文算术政治地理音乐美术
A×××
B××××
C××

对C进行分类讨论:
(i)c:地理+语文
a:政治+音乐
(ii)c:地理+政治
a:语文+音乐(矛盾)
(iii)c:地理+音乐……
代码实现如下:

#include<iostream>
#include<cstring>
using namespace std;
struct teacher {
	char name;
	char c[20] = { 0 };
}t[3];
int main()
{
	t[0].name = 'A';
	t[1].name = 'B';
	t[2].name = 'C';
	int a, b, c, d, e, f;
	for (a = 1; a <= 3; a++)
		for (b = 1; b <= 3; b++)
			for (c = 1; c <= 3; c++)
				for (d = 1; d <= 3; d++)
					for (e = 1; e <= 3; e++)
						for (f = 1; f <= 3; f++)
						{
							if ((a + b + c + d + e + f == 12) && (a * b * c * d * e * f == 36))
							{
								if ((c != b) && (d != 2) && (d != 1) && (b != 1) && (d != b) && (e != a) && (e != 2) && (a != 2)&&(a!=d))
								{

									strcat_s(t[a - 1].c, "语文");
									strcat_s(t[b - 1].c, "算数");
									strcat_s(t[c - 1].c, "政治");
									strcat_s(t[d - 1].c, "地理");
									strcat_s(t[e - 1].c, "音乐");
									strcat_s(t[f - 1].c, "美术");
									for (int i = 0; i < 3; i++)
										cout << t[i].name << "教" << t[i].c << endl;
								}
							}
						}
	return 0;
}

输出如图所示:
在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grausam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值