一个蛇形排列算法(C#)
来源:互联网 发布:数据库bc范式分解问题 编辑:程序博客网 时间:2024/05/29 03:38
问题:
有这样一类问题,例如新生入学分班,现有100名新生,要分到4个班级里, 要求每个班级的学生成绩基本平均。假设新生的入学分数就是100,99,98,97,96,95,……3,2,1。分班结果如下:
0班 1班 2班 3班
100 99 98 97
93 94 95 96
92 91 90 89
85 86 87 88
……
这样分班可以尽量使四个班级的成绩平均。
也就是将新生按成绩排序后蛇形排列到四个班级中,算法如下:
private string GetIndex(int num,int group)//num 代表新生数量,group代表班级数量。
...{
string result = ""; //一个索引的字符串,每位代表一个班级。
int index = 0;//索引字符串中的一位
int steps = 1; //步长
for(int i = 0; i < num; i++)//为每个新生找班级
...{
result += index.ToString();//构造索引字符串
if(index == group - 1)//判断是否到达班级队列尾部
...{
if(steps == 1)
...{
index = group ;
}
steps = -1;//修改前进方向为"<--"
}
if(index == 0)//判断是否到达班级队列首部
...{
if(steps == -1)
...{
index = -1;
}
steps = 1;//修改前进方向为"-->"
}
index += steps;
}
return result;
}
...{
string result = ""; //一个索引的字符串,每位代表一个班级。
int index = 0;//索引字符串中的一位
int steps = 1; //步长
for(int i = 0; i < num; i++)//为每个新生找班级
...{
result += index.ToString();//构造索引字符串
if(index == group - 1)//判断是否到达班级队列尾部
...{
if(steps == 1)
...{
index = group ;
}
steps = -1;//修改前进方向为"<--"
}
if(index == 0)//判断是否到达班级队列首部
...{
if(steps == -1)
...{
index = -1;
}
steps = 1;//修改前进方向为"-->"
}
index += steps;
}
return result;
}
调用该方法 GetIndex(100,4),即100个新生分到4个班级中,得到班级队列如下
0123 3210 0123 3210 0123 3210 0123 3210 0123 ……
对应的学生队列为:
100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,……
由两个队列就能得到分班结果
- 一个蛇形排列算法(C#)
- 算法 - 输出一个字符串的全排列(C++)
- 蛇形排列
- 排列算法及组合算法(C++)
- 一个全排列算法
- 一个比较好的全排列算法(C语言)
- 蛇形排列 非递归
- 逆时针蛇形排列矩阵
- 蛇形算法
- 排列算法,生成排列C++permutation
- 算法40(字符串的排列,给出一个函数来输出一个字符串的所有排列)
- 一个全排列的算法!
- 一个全排列另类算法
- 一个求全排列的算法
- 一个包含M个元素的集合N个位置的全排列算法(附C代码)
- 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形
- 蛇形矩阵的实现(C++)
- 刘汝佳 蛇形填数(C版)
- MyEclipse,直接打开浏览器的插件
- 杂项
- 深入浅出之正则表达式(一)
- 日期格式化
- 初学DNN
- 一个蛇形排列算法(C#)
- ABAP Qusetionlist
- proxool的oracle配置
- Tomcat全攻略
- Hibernate连接SQL驱动与HQL问题
- .NET中多文档界面排版
- Nhibernate学习之起步篇-1
- 炒股资料下载网址
- 学习WPF一些必看的链接