从愿望清单中获得最佳分配

时间:2020-08-02 09:57:57

标签: php mysql excel ms-access

首先:很抱歉我的英语不好,希望您能理解我的要求。

在我的学校里,毕业生必须在最后一年选择一个主题作为论文。每个学生都从一个主题领域中选择一位导师来帮助他们。

开始位置

  • 每个学生必须准确指定三个愿望,这些愿望按照偏好的降序排列。例如:1.乔布斯先生/ 2.盖茨先生/ 3.马斯克先生
  • 每位导师最多可以指导三名学生

我如何确保尽可能多的学生得到他们的第一个愿望?在其余的学生中,应尽可能多地获得第二个愿望,其余的则获得第三个愿望。

哪种编程语言最适合解决此问题:PHP,Access,Excel?

到目前为止,我们需要花费几个小时的时间来手工整理愿望。有时是几天。

我们想使这一过程自动化。非常感谢您的每一个想法,每种方法,每一个提示。

理想情况:我们有一个列表,显示了导师和分配给他们的学生。

示例:

  • 先生乔布斯->斯泰西,卡尔,旋律
  • 先生盖茨->威廉,埃里克,夏洛特
  • 先生麝香->安东尼,莎拉,内莉

最良好的祝愿,保持健康!

1 个答案:

答案 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);