hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 1526|回复: 9

八个人坐成一排,满足条件的坐法有多少种? 编程求解。

[复制链接]

481

主题

481

帖子

1465

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1465
发表于 2023-10-15 04:24:54 | 显示全部楼层 |阅读模式


上图表示某客机上的一排座位,其中 A1 和 A8 是靠弦窗的座位,A2 与 A3 及 A6 与 A7 之间都是走道。
有八位旅客 1、2、3、4、5、6、7、8 要坐在这一排座位上,其中旅客 1、2、3、4 对座位有如下要求:
1 不靠弦窗坐(即不坐 A1 和 A8); 1 和 2 必须相邻,且 1 与 2 之间不能是走道(被走道隔开就不算相邻)。
3 与 4 都不靠弦窗坐,且 3 与 4 不能相邻(若被走道隔开也不算相邻,例如 3 坐  A2 位时,4 可以坐在 A3 位)。
5、6、7、8  四位旅客对座位没有要求,可随便分配。
问:共有多少种坐法? 有人算得共有 2208 种坐法,见 http://www.mathchina.com/bbs/for ... &extra=page%3D1
现在的问题是,如何用 mathematica (下简称 MMA)写一个程序来验证 2208 种坐法是否正确。

我想以 MMA 中的全排列指令 Permutations[{1, 2, 3, 4, 5, 6, 7, 8}] 为基础,从中筛选掉不符合要求的那些坐法,剩余的就是答案。但尚未折腾出一个成功的程序。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

190

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2023-10-15 04:25:44 | 显示全部楼层
按题目的要求,编程如下。运行结果是 2568,但这个结果有错,因为把每一种符合要求的排列情况打印出来观察,发现有不符合要求的排列出现。
  1. Clear["Global`*"];aa = Permutations[{1, 2, 3, 4, 5, 6, 7, 8}] ;n = 0;For[i = 1, i <= 8!, i++, a = aa[[i]]; b = a; If[(1 != b[[1]] &&  1 != b[[8]]) &&  (3 != b[[1]] &&       3 != b[[8]]) &&  (4 != b[[1]] &&  4 != b[[8]]),  If[(1 == b[[2]] &&  2 == b[[1]]) || (1 == b[[7]] &&        2 == b[[8]]) || (1 == b[[3]] &&        2 == b[[4]]) || (1 == b[[4]] &&        2 == b[[3]]) || (1 == b[[4]] &&        2 == b[[5]]) || (1 == b[[5]] &&        2 == b[[4]]) || (1 == b[[5]] &&        2 == b[[6]]) || (1 == b[[6]] &&  2 == b[[5]]),   If[(3 ==        b[[2]]) || (4 ==         b[[2]] || (3 == b[[3]] &&  4 != b[[4]]) || (4 == b[[3]] &&           3 != b[[4]])) || (3 ==         b[[4]] &&  (4 != b[[3]] || (4 != b[[5]]))) || (4 ==         b[[4]] &&  (3 != b[[3]] || (3 != b[[5]]))) || (3 ==         b[[5]] &&  (4 != b[[4]] || (4 != b[[6]]))) || (4 ==         b[[5]] &&  (3 != b[[4]] || (3 != b[[6]]))) || (3 ==        b[[6]]) || (4 == b[[5]]),    n = n + 1]]]; ]; Print["n = ", n];
复制代码
回复

使用道具 举报

0

主题

202

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-15 04:26:11 | 显示全部楼层
我只能建议你穷举法!
回复

使用道具 举报

0

主题

201

帖子

71

积分

关内侯

Rank: 2

积分
71
发表于 2023-10-15 04:26:36 | 显示全部楼层
  1. Length@Select[Table[Insert[v,0,{{3},{7}}],{v,Permutations@Range@8}],Length@SequencePosition[#,{1,2}]+Length@SequencePosition[#,{2,1}]==1&&Length@SequencePosition[#,{3,4}]+Length@SequencePosition[#,{4,3}]==0&&Length@Complement[{1,3,4},{#[[1]],#[[10]]}]==3&]
复制代码

2208 是对的
回复

使用道具 举报

0

主题

198

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-10-15 04:27:04 | 显示全部楼层
不知道如何简化
回复

使用道具 举报

0

主题

186

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-10-15 04:27:28 | 显示全部楼层
  1. Clear["Global`*"];(*清除所有变量*)fun[list_]:=Module[{aaa,p1,p2,p3,p4},    aaa=Insert[list,"走道",{{3},{7}}];(*在第3、第7个位置前插入走道*)    If[Or[aaa[[1]]==1,aaa[[-1]]==1],Return[False]];(*如果最左边最右边为1,那返回错误*)    {p1,p2,p3,p4}=Flatten[Position[aaa,#]&/@{1,2,3,4}];(*获取1234的位置*)    If[Abs[p1-p2]!=1,Return[False]];(*如果12位置不相邻,则返回错误*)    If[Or[aaa[[1]]==3,aaa[[-1]]==3],Return[False]];(*如果最左边最右边为3,那返回错误*)    If[Or[aaa[[1]]==4,aaa[[-1]]==4],Return[False]];(*如果最左边最右边为4,那返回错误*)    If[Abs[p3-p4]==1,Return[False]];(*如果34位置相邻,则返回错误*)    Return[True](*都到这了,肯定返回True*)]aaa=Permutations[{1,2,3,4,5,6,7,8}];(*生成所有可能*)bbb=Select[aaa,fun[#]&](*只选择符合条件的情况*)ccc=Length[bbb](*统计个数*)
复制代码

我的代码,简单容易懂

2208个结果
回复

使用道具 举报

0

主题

206

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-15 04:28:27 | 显示全部楼层
运行结果确实是2208种排法。
回复

使用道具 举报

0

主题

200

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-15 04:29:12 | 显示全部楼层
  1. Length@Select[Table[Insert[v,0,{{3},{7}}],{v,Permutations@Range@8}],SequenceCount[#,{1,2}]+SequenceCount[#,{2,1}]==1&&SequenceCount[#,{3,4}]+SequenceCount[#,{4,3}]==0&&Intersection[{1,3,4},{First@#,Last@#}]=={}&]
复制代码
回复

使用道具 举报

0

主题

156

帖子

125

积分

关内侯

Rank: 2

积分
125
发表于 2023-10-15 04:29:20 | 显示全部楼层
2# 楼的程序错误在哪里?需要如何修改才能运行成功?
回复

使用道具 举报

0

主题

202

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-15 04:29:42 | 显示全部楼层
mathematica这种垃圾程序,连个好用的调试器都没有,调试起代码费劲死了。
所以没人对看你的代码感兴趣。唯一的好办法就是自己多写注释、多缩进、不层层嵌套了。

想调试代码,自己就去慢慢print函数debug吧
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-22 03:48 , Processed in 0.078659 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

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