首先:很抱歉我的英语不好,希望您能理解我的要求。
在我的学校里,毕业生必须在最后一年选择一个主题作为论文。每个学生都从一个主题领域中选择一位导师来帮助他们。
开始位置
我如何确保尽可能多的学生得到他们的第一个愿望?在其余的学生中,应尽可能多地获得第二个愿望,其余的则获得第三个愿望。
哪种编程语言最适合解决此问题:PHP,Access,Excel?
到目前为止,我们需要花费几个小时的时间来手工整理愿望。有时是几天。
我们想使这一过程自动化。非常感谢您的每一个想法,每种方法,每一个提示。
理想情况:我们有一个列表,显示了导师和分配给他们的学生。
示例:
最良好的祝愿,保持健康!
答案 0 :(得分:1)
如果您正确格式化输入数组,那么这段php就可以做到。
$ preferencesOfStudents是学生,按其偏爱的老师排列。
function shuffle_assoc($list) {
if (!is_array($list)) return $list;
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key) {
$random[$key] = $list[$key];
}
return $random;
}
$preferencesOfStudents = [
'students' => [
'Stacy' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Carl' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Melody' => ['Mr Jobs','Mr Musk','Mr Gates'],
'William' => ['Mr Musk','Mr Gates','Mr Jobs'],
'Eric' => ['Mr Gates','Mr Jobs','Mr Musk'],
'Charlott' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Anthony' => ['Mr Gates','Mr Musk','Mr Jobs'],
'Sarah' => ['Mr Gates','Mr Jobs','Mr Musk'],
'Nelly' => ['Mr Gates','Mr Musk','Mr Jobs']
]
];
// 1 = Jobs, 2 = Gates, 3 = Musk
$teachers = [
'Mr Jobs' => [],
'Mr Gates' => [],
'Mr Musk' => []
];
$randomstudentsarray = shuffle_assoc($preferencesOfStudents['students']);
//print_r($randomstudentsarray);
foreach($randomstudentsarray as $name => $student){
if(count($teachers[$student[0]]) < 3){
$teachers[$student[0]][] = $name;
} elseif(count($teachers[$student[1]]) < 3) {
$teachers[$student[1]][] = $name;
} else {
$teachers[$student[2]][] = $name;
}
}
print_r($teachers);