以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 安排考场如何使本校学生不相邻 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27559) |
-- 作者:gajywz -- 发布时间:2013/1/4 18:18:00 -- 安排考场如何使本校学生不相邻 快年终考试了,我设计了一个考场安排程序,别的一切顺利,就是在排序的时候会出现同一个学校的学生相邻的情况。请教,代码如何设计才能避免此类情况的发生。 共15所中学,学生人数相差很多,多的900多人,少的100来人。要求每一考场都有各校学生,同一学校学生不相邻。告知排序原理。谢谢了!! 照片对照表,准考证,考场核对表,考号自动编写,考场自动完成等都已成功。而且可以单独查找某一个学生并打印其准考证。 [此贴子已经被作者于2013-1-4 18:20:55编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/1/4 18:28:00 -- 原理很简单啊。 每次随机抽取一个剩下的,如果周围有同校的,再次随机抽取,直到周围没有同校的,然后继续下一轮的操作。 |
-- 作者:gajywz -- 发布时间:2013/1/5 9:44:00 -- 哈哈,有意思。那得多长时间能完成呀,又得取随机数,又得新建一个表,将这行所有的内容克隆到新表中,再比较周围有无同校学生,如满足要求,再回来,找出刚才随机的位置删除本行内容......几千人不得把电脑“累死”呀?哈哈哈......而且你告诉我的做法一定不满足,每个考场都有所有学校的学生。 我采用的是按比例分配位置的做法,一次成的,不用新建表,我就是感觉判断周围是否有同一学校的学生太麻烦,只要前后桌不是同校的就行。要按您的说法做,那效率应该是最低的那种,不是编程的理念。我感觉应该有一种逻辑算法,但我想不出来。 如果是同校相邻的,用什么语句把他们分开,最简单有效的。交换两行信息的语句怎么写呀? 求:告诉我点真格的东西,想学点真本事。 以前我看过一个玩棋的程序,很短,A4纸一张就能打出来。可和电脑玩很难赢它。我琢磨了很长时间也没弄明白,它里面的算法。现在也不明白,真是羡慕。 [此贴子已经被作者于2013-1-5 9:51:48编辑过]
|
-- 作者:lin_hailun -- 发布时间:2013/1/5 10:08:00 -- 呃,二楼这种最容易理解。 稍微优化一下就行了,比如你说的按比例,根据教室位数,根据学校人数,分配适当的学生到一个教室,排好一个教室,其余教室也就排好了。 排好一个教室也不会太难吧?最后,剩余的人,再排一下。 [此贴子已经被作者于2013-1-5 10:08:24编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/1/5 10:15:00 -- 其实根本不需要多长时间,就是几千人也可以很快完成,人是活的,当人多的时候,换个思路: 不用随机抽取方法,在准备提取某个座位的学生时,先列出周围的学校,然后在剩余的学生找出不是这些学校的下一个学生。
你就是几万人,完成的时间也会以秒为单位的。 [此贴子已经被作者于2013-1-5 10:17:42编辑过]
|
-- 作者:sunsenfeng -- 发布时间:2013/1/5 10:28:00 -- 你的要求有点苛刻,由于学校人数相差太多,不可能绝对同校生不相邻.比如A校1000人,B...H校各10人,你觉得能按照你的要求排除位置吗? 差不多应该就行了 |
-- 作者:程兴刚 -- 发布时间:2013/1/5 12:59:00 -- 巧用集合! |
-- 作者:gajywz -- 发布时间:2013/1/5 14:14:00 -- 回复:(程兴刚)巧用集合! 能麻烦您把您的设计理念说一下吗?和4楼的想法一样吗?我希望能从中受益。 [此贴子已经被作者于2013-1-5 14:15:59编辑过]
|
-- 作者:gajywz -- 发布时间:2013/1/5 14:32:00 -- 回复:(sunsenfeng)你的要求有点苛刻,由于学校人数相... 做事要认真,我的要求是可以完成的。以前电脑排好后我自己再人工把相邻的选出来,调一下位置。几千人一共也就20来个相邻的,不会很多。因为有15个单位,大多数都在200人以上,4个单位800以上,不到100的2个单位。你的想法不敢苟同,我感觉你是个大手笔的人,不太适合做软件编辑工作。(不准也别生气,没有别的意思) |
-- 作者:lin_hailun -- 发布时间:2013/1/5 14:37:00 -- 楼主想做的这个,真不难,上传点测试数据让大家弄一下呗。去掉敏感信息就行。 |