本文整理汇总了C++中Students::GetSubject方法的典型用法代码示例。如果您正苦于以下问题:C++ Students::GetSubject方法的具体用法?C++ Students::GetSubject怎么用?C++ Students::GetSubject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Students
的用法示例。
在下文中一共展示了Students::GetSubject方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SplitStudents
bool SplitStudents()
{
ofstream ofs;
ofs.open("log.txt");
static int tmpMatrix[3][3] = { 0 };
for (size_t i = 0; i < TypeNum; i++)
{
Students* pp = pStu[i];
cout << "processing " << pp->GetName() << "..." << endl;
for (size_t mi = 0; mi < 3; mi++)
{
tmpMatrix[mi][0] = copySubjectMatrix[mi][pp->m_s1];
tmpMatrix[mi][1] = copySubjectMatrix[mi][pp->m_s2];
tmpMatrix[mi][2] = copySubjectMatrix[mi][pp->m_s3];
}
//if (ofs.is_open())
//{
// ofs << "processing " << pp->GetName() << "..." << endl;
// ofs << "original:" << endl;
// for (size_t mi = 0; mi < 3; mi++)
// {
// ofs << tmpMatrix[mi][0] << " " << tmpMatrix[mi][1] << " " << tmpMatrix[mi][2] << endl;
// }
// ofs << endl;
//}
int num = pp->m_stuNum;
int index = 0;
while (num > 0)
{
index = (rand() % 6);
bool minusSuccess = false;
for (size_t identityIndex = 0; identityIndex < 6; identityIndex++)
{
int ii = (index + identityIndex) % 6; // 不断变换单位矩阵
// 检查根据当前单位矩阵是否有学生可以分
bool hasStudent = true;
for (size_t ri = 0; ri < 3; ri++)
{
hasStudent = true;
for (size_t ci = 0; ci < 3; ci++)
{
if (identityMatrix[ii][ri][ci] == 1)
hasStudent = tmpMatrix[ri][ci] > 0;
}
if (!hasStudent)
break;
}
if (!hasStudent)
continue;
else
{
// 分学生
for (size_t ri = 0; ri < 3; ri++)
{
for (size_t ci = 0; ci < 3; ci++)
{
if (identityMatrix[ii][ri][ci] == 1)
{
tmpMatrix[ri][ci]--;
classes[ri][pp->GetSubject(ci)].Push(pp->GetName(), pp->m_stuNum - num); // 分学生
}
}
}
num--;
minusSuccess = true;
break;
}
}
// 由于某个班级人数分完了导致分不了,此时需要调整班级人数来容纳新的学生
// 这里可以通过添加班级人数的最大误差来限制人数
if (!minusSuccess)
{
vector<pair<int, int>> tmpIndex; // 有些课时不排课(用-1表示),找出来
for (size_t ii = 0; ii < 3; ii++)
{
for (size_t jj = 0; jj < 3; jj++)
{
if (tmpMatrix[ii][jj] == -1)
tmpIndex.push_back(pair<int, int>(ii, jj));
}
}
int iii = 0;
for (iii = 0; iii < 6; ++iii)
{
int sum = 0;
for (int jjj = 0; jjj < tmpIndex.size(); ++jjj)
{
sum += identityMatrix[iii][tmpIndex[jjj].first][tmpIndex[jjj].second];
}
if (sum == 0)
break;
}
//.........这里部分代码省略.........