数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 2671|回复: 6

八人坐 AC,DEFG,HK 八座位,甲乙要相邻,丙丁不相邻,甲丙丁都不坐 AK,有几种坐法?

[复制链接]
发表于 2023-8-9 11:35 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2023-8-9 15:18 | 显示全部楼层
实在 不会 容斥原理 一个一个算
回复 支持 反对

使用道具 举报

发表于 2023-8-10 08:22 | 显示全部楼层
  八人坐 AC,DEFG,HK 八座位,甲乙要相邻,丙丁不相邻,甲丙丁都不坐 AK,有几种坐法?

  首先考虑甲乙丙丁四人的坐法。因为丙丁的地位是对称的,暂时不考虑两人之间的区别。

     因为甲乙要相邻,而且甲不坐 AK 的位置,所以有下列几种情形:

(一)甲坐 C ,乙坐 A 。因为丙丁不相邻且不坐 AK ,这时两人的位置有下列 7 种选法:

          DF ,DG ,DH ,EG ,EH ,FH ,GH 。

(二)甲坐 H ,乙坐 K 。这种情形与(一)对称类似,所以也有 7 种选法。

(三)甲乙两人坐 DE 。这时丙丁两人的位置有下列 5 种选法:

        CF ,CG ,CH ,FH ,GH 。

     再加上甲乙两人可左右交换,有 2 种坐法。所以这种情形共有 5 × 2 = 10 种选法。

(四)甲乙两人坐 FG 。这种情形与(三)对称类似,所以也有 10 种选法。

(五)甲乙两人坐 EF 。 这时丙丁两人的位置有下列 6 种选法:

    CD ,CG ,CH ,DG ,DH ,GH 。

    再加上甲乙两人可左右交换,有 2 种坐法。所以这种情形共有 6 × 2 = 12 种选法。

    综合以上分析,在考虑甲乙两人的坐法以及丙丁两人的位置的情况下,选法种数有

                7 + 7 + 10 + 10 + 12 = 46 种。

    又因为丙丁地位对称,两人之间还可互相交换位置,所以上面的选法种数还要乘以 2 。

    其余戊己庚辛四人,还可在剩下的四个位置中任意排列,还有 4!= 24 种坐法。

    所以,本题要求的坐法总数为 46 × 2 × 24 = 2208 种。

点评

謝謝陸老師  发表于 2023-8-10 18:10
112352  发表于 2023-8-10 18:10
回复 支持 反对

使用道具 举报

发表于 2023-8-19 22:26 | 显示全部楼层
本帖最后由 天山草 于 2023-8-20 06:33 编辑

此问题也可以用 mathematica 编程来解决。
下面介绍两个具体程序。
程序一是 nny 网友写的:
  1. Clear["Global`*"];
  2. fun[list_] := Module[{a, p1, p2, p3, p4},  a = Insert[list, "走道", {{3}, {7}}];(*在第3、第7个位置前插入走道*)
  3.   If[Or[a[[1]] == 1, a[[-1]] == 1], Return[False]];(*如果最左边最右边为1,  则返回错误*){p1, p2, p3, p4} = Flatten[Position[a, #] & /@ {1, 2, 3, 4}];(*获取1234的位置*)  
  4.   If[Abs[p1 - p2] != 1, Return[False]];(*如果1、2位置不相邻,则返回错误*)
  5.   If[Or[a[[1]] == 3, a[[-1]] == 3], Return[False]];(*如果最左边最右边为3,则返回错误*)
  6.   If[Or[a[[1]] == 4, a[[-1]] == 4], Return[False]];(*如果最左边最右边为4,则返回错误*)
  7.   If[Abs[p3 - p4] == 1, Return[False]];(*如果3、4位置相邻,则返回错误*)
  8.   Return[True](*都到这了,肯定返回True*)]
  9. a = Permutations[{1, 2, 3, 4, 5, 6, 7, 8}];(*生成所有可能*)
  10. b = Select[a, fun[#] &];(*只选择符合条件的情况*)
  11. Length[b](*统计个数*)
  12. b; (*去掉分号将逐个列出分配方案*)
复制代码


下面这个是按穷举法写的笨程序,程序虽笨但容易理解,也方便套用到其它的排列组合问题。
  1. a = Permutations[{1, 2, 3, 4, 5, 6, 7, 8}];
  2. b = {};
  3. Do[If[a[[k, 1]] != 1 && a[[k, 8]] != 1 && a[[k, 1]] != 3 && a[[k, 8]] != 3 && a[[k, 1]] != 4 && a[[k, 8]] != 4,
  4.    If[{a[[k, 2]], a[[k, 3]]} != {1, 2} && {a[[k, 2]], a[[k, 3]]} != {2, 1} && {a[[k, 3]], a[[k, 4]]} != {3, 4} && {a[[k, 3]], a[[k, 4]]} != {4, 3} && {a[[k, 4]], a[[k, 5]]} != {3, 4} && {a[[k, 4]], a[[k, 5]]} != {4, 3} && {a[[k, 5]], a[[k, 6]]} != {3, 4} && {a[[k, 5]], a[[k, 6]]} != {4, 3},
  5.   If[{a[[k, 1]], a[[k, 2]]} == {2, 1} || {a[[k, 7]], a[[k, 8]]} == {1, 2} || {a[[k, 3]], a[[k, 4]]} == {1, 2} || {a[[k, 3]], a[[k, 4]]} == {2, 1} || {a[[k, 4]], a[[k, 5]]} == {1, 2} || {a[[k, 4]], a[[k, 5]]} == {2, 1} || {a[[k, 5]], a[[k, 6]]} == {1, 2} || {a[[k, 5]], a[[k, 6]]} == {2, 1},
  6.      b = b~Join~{a[[k]]}]]], {k, 8!}];
  7. Length[b](* 座位分配方案数 *)
  8. b; (*去掉分号将逐个列出分配方案*)
复制代码


两种程序运行结果都是 2208。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-11-24 08:07 , Processed in 0.087891 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表