一个超难的考号编排算法问题

zhoujin96 2012-10-27 09:54:34
样本数据:
年级	学校代码	班级	姓名	考号
1 10 1 吴泽华 1100001
1 10 2 周慧林 1100002
1 10 3 王彬吉 1100003
1 10 4 张梓萍 1100004
1 10 5 杨逸 1100005
1 10 1 余嘉尉 1100006
1 10 2 刘奕珞 1100007
1 10 3 张齐鑫 1100008
1 10 4 谭宇翔 1100009
1 10 5 谢豪楠 1100010
1 10 1 邱登程 1100011
1 10 2 韩艺 1100012
1 10 3 卢文灏 1100013
1 10 4 李房锦 1100014
1 10 5 张潇然 1100015
1 10 1 唐艺天 1100016
1 10 2 杜沛杰 1100017
1 10 3 李彦鲸 1100018
1 10 4 袁韬雄 1100019
1 10 5 张薇 1100020
1 10 1 龚治朋 1100021
1 10 2 刘新月 1100022
1 10 3 赵汶情 1100023
1 10 4 叶钰莎 1100024
1 10 5 董凯铭 1100025
1 10 2 吴浩正 1100026
1 10 4 唐诗华 1100027
1 10 5 曾海罗 1100028
1 10 4 曹雨 1100029

考号的编排规则为:1号为1班的第1名同学,2号为2班的第1名同学,以此类推。如果每个班人数都相等的情况下,很好解决。但是每班人数不同,该如何设计算法,准确排序。

求编排考号的程序算法
...全文
5644 116 打赏 收藏 转发到动态 举报
写回复
用AI写文章
116 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangyuan11 2012-11-11
  • 打赏
  • 举报
回复
zenmeyang
JTZP007 2012-11-08
  • 打赏
  • 举报
回复
学习了学习了学习了
huqiuser 2012-11-08
  • 打赏
  • 举报
回复
引用 91 楼 Ranen2010 的回复:
SQL版。SQL code1234567891011121314151617181920212223242526272829303132333435363738394041SELECT * INTO TblUser FROM (select 1 AS 年级,10 AS 学校,1 AS 班级, CONVERT(NVARCHAR(20),'吴泽华') as 姓名, Conve……
++
卧_槽 2012-11-08
  • 打赏
  • 举报
回复
楼主要确定到底有几个班,如果班数-1超过最多人数班人数-最少人数班人数就可以完美排列。 如果只有两个班,人数又不等,那总会有同班的排到一起了。
卧_槽 2012-11-08
  • 打赏
  • 举报
回复
引用 103 楼 xiaoH1314 的回复:
引用 97 楼 so_while 的回复:凑个热闹. 我能问一下你这个算法是怎么解决前后左右都不是同班同学的吗!
那至少要有5个班,少了什么算法都不顶用。 还要有每间考场的横竖座位数。 其实也不复杂。
有新工作否 2012-11-08
  • 打赏
  • 举报
回复
上面这么多人居然没看清楚楼主的题目?都说了,班级人数不相等,连续的不能是同班级的。。。要是班级人数相等,谁都会做。班级人数不相等的情况下,变数太多了,尤其是相差很大的情况下,很难解决! 如果相差不大,前期还是以人数相等的情况排序,然后按照人数最少的那个班级开始截取,然后插入。
bill2006 2012-11-07
  • 打赏
  • 举报
回复
樓豬的最終目的是不是考場中每一位考生的前后左右坐的都不是自己的同班同學, 若是,樓豬所說的規則本身就不能確保達到目的,應先假定準考證在每個考場的貼放 順序,然后將每個考場視為一個矩形數組,在此基礎上設計算法
引用 楼主 zhoujin96 的回复:
本帖最后由 zhoujin96 于 2012-10-27 21:56:35 编辑样本数据: C# code 123456789101112131415161718192021222324252627282930 年级 学校代码 班级 姓名 考号 1 10 1 吴泽华 1100001 1 10 2 周慧林 1100002 1 10 ……
卑鄙的我 2012-11-06
  • 打赏
  • 举报
回复
每个班分别排序,各自建成一个队列,按顺序往一个vector里面送吧
xiaoH1314 2012-11-06
  • 打赏
  • 举报
回复
引用 106 楼 fatg1988 的回复:
引用 104 楼 xiaoH1314 的回复:引用 98 楼 fatg1988 的回复:引用 94 楼 sp1234 的回复:引用 79 楼 fatg1988 的回复:思想:既然每个班级人数不一样,那么不妨让他们班级人数都变成最大,设置几个虚拟人头就行了,这样在容器里排好他们位置很简单,然后再把虚拟人头拿掉就行了。 代码: while(class.length-->0……
因为这是考试,要把实际情况考虑进去啊,而且每个班人数差距不可能差别那么大,撑死了也就10人左右,至于挨着不挨着可能会有,所以应当算出挨着数最小那个。。。。。。。。。。。。。。。。说实话如果真要解决这个问题A、B、C、D卷最合适了,呵呵
七神之光 2012-11-06
  • 打赏
  • 举报
回复
引用 104 楼 xiaoH1314 的回复:
引用 98 楼 fatg1988 的回复:引用 94 楼 sp1234 的回复:引用 79 楼 fatg1988 的回复:思想:既然每个班级人数不一样,那么不妨让他们班级人数都变成最大,设置几个虚拟人头就行了,这样在容器里排好他们位置很简单,然后再把虚拟人头拿掉就行了。 代码: while(class.length-->0){ ArrList.add(student……
1。楼主好像么有提到这方面的需求,尤其是每个考场多少人没提,教室长什么样不知道 2.假定一个年级两个班 一个班1人 一个班10000000000人,你觉得是空座位好?还是空考场好? 还是像某些人说的那样不能浪费考场空间好?
ahalf 2012-11-05
  • 打赏
  • 举报
回复
如果是我的项目 绝不在这上寻求解决方法 果断要求重定规则 仅供参考
ahalf 2012-11-05
  • 打赏
  • 举报
回复
无语啊 错误的规则会产生一系列的后续问题 例如: 排完序后人少的班转入新生 某生从1班转2班 ........... 这样下去贻害无穷
七神之光 2012-11-05
  • 打赏
  • 举报
回复
我再给你个解决方案: 1.使用集合Arraylist存放每个班的人 2.排座位:都往结果集合里面放,有人就放,没人不放 boolean flag = true; while(flag){ if(class[i].hasNext()) result.add(class[i].get(j)) } 难道还问我这个flag是干嘛的而又该如何处理?
七神之光 2012-11-05
  • 打赏
  • 举报
回复
引用 94 楼 sp1234 的回复:
引用 79 楼 fatg1988 的回复:思想:既然每个班级人数不一样,那么不妨让他们班级人数都变成最大,设置几个虚拟人头就行了,这样在容器里排好他们位置很简单,然后再把虚拟人头拿掉就行了。 代码: while(class.length-->0){ ArrList.add(student); ... } while(class.length*n-->0) {……
这么简单的算法怎么就不明白呢?我再仔细描述一遍。 1。在n个班里找出人最多的那个,然后每班扩充到最大,补充的人做标记,名字都叫猪; 2.ArrayList循环加入所有人。 3.ArrayList里面去掉所有名字叫猪的人。 我加人头加座位 最后不都去掉了么? 还有疑问?这个问题本来就是标题党
Tom199818 2012-11-05
  • 打赏
  • 举报
回复
一直累加上去不就行了......那么简单的问题...
xiaoH1314 2012-11-05
  • 打赏
  • 举报
回复
引用 98 楼 fatg1988 的回复:
引用 94 楼 sp1234 的回复:引用 79 楼 fatg1988 的回复:思想:既然每个班级人数不一样,那么不妨让他们班级人数都变成最大,设置几个虚拟人头就行了,这样在容器里排好他们位置很简单,然后再把虚拟人头拿掉就行了。 代码: while(class.length-->0){ ArrList.add(student); ... } while(cla……
我能问一下你这个算法是怎么解决前后左右都不是同班同学的吗!
xiaoH1314 2012-11-05
  • 打赏
  • 举报
回复
引用 97 楼 so_while 的回复:
凑个热闹.
我能问一下你这个算法是怎么解决前后左右都不是同班同学的吗!
so_while 2012-11-04
  • 打赏
  • 举报
回复
凑个热闹.
不停电的闹钟 2012-11-04
  • 打赏
  • 举报
回复
还没人得分??难道要老衲出手??
luanzhiye 2012-11-04
  • 打赏
  • 举报
回复
标记一下这个话题,想出答案了再贴上来。
加载更多回复(93)

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧