编排座位C++学生党

杭十三中一班主任想根据学生独立做业分数编排座位,具体要求如下:
1、班级共29男生,24女生。
2、5-6人一组,共九组,3*3排列。
3、1组:
男1——女9;
男2——女8;
……;
2组:
男10——女18;
男11——女17;
……;
如此类推,在1组、2组、3组中各选一组,形成6(或5)人小组。
4、9个6人小组按1-9的顺序轮换:
6 7 8
5 1 9
4 3 2
5、输入几个不能在一个6人小组里的两个学号,保证他们两个人不在相邻组内(在组平均成绩尽量不变的前提下)。
(如:A在1组,B和A不能在一组,则B不能在1组、2组、9组)
6、输入几个必须在一个6人小组里的两个学号,保证他们两个人在同组内(在组平均成绩尽量不变的前提下)。
7、一个组内有2-3名女生。
我是该班的一名学生,受班主任委托排座位。由于技术不行,难以完成。
目前的代码如下(仅到第三步,而且有问题):

#include<bits/stdc++.h>
using namespace std;
int boyrank[30],girlrank[60],st[10][3],nd[10][3],rd[10][3];
int bn,gn;
//排序开始 
struct student
{
    int num;
    int score;
};
bool cmp(const student& a,const student b)
{
    if(a.score<b.score)
        return true;
    else if(a.score==b.score&&a.num<b.num)
        return true;
    return false;
}
void bpaixu(int n1)
{
    vector<student> table(n1);
    float f;
    for(int i=0;i<n1;i++){
        table[i].num=i+1;
        cout<<table[i].num<<" ";
        cin>>f;
        table[i].num=int(4*f);
    }
    sort(table.begin(),table.end(),cmp);
    for(int i=0;i<n1;i++)
        boyrank[n1-1-i]=table[i].num;
} 
void gpaixu(int n1)
{
    vector<student> table(n1);
    float f;
    for(int i=0;i<n1;i++){
        table[i].num=i+1+bn;
        cout<<table[i].num<<" ";
        cin>>f;
        table[i].num=int(4*f);
    }
    sort(table.begin(),table.end(),cmp);
    for(int i=0;i<n1;i++)
        girlrank[n1-1-i]=table[i].num;
} 
//排序结束 
    int main(){
    cin>>bn>>gn;
     bpaixu(bn);
     gpaixu(gn);
     for(int i=0;i<9;i++){
         int j=9-i;
         st[i][0]=boyrank[i];
         st[i][1]=girlrank[j];
     } 
     for(int i=9;i<18;i++){
         int j=27-i;
         nd[i][0]=boyrank[i];
         nd[i][1]=girlrank[j];
     } 
     girlrank[25]=boyrank[28];
     girlrank[26]=boyrank[29];
     girlrank[27]=boyrank[30];
     for(int i=18;i<27;i++){
         int j=45-i;
         rd[i][0]=boyrank[i];
         rd[i][1]=girlrank[j];
     } 
//配对 
     for(int i=0;i<9;i++){
         int j=i+1;
         cout<<j<<"..";
         cout<<st[i+1][0]<<"/"<<st[i][1]<<endl;
         cout<<nd[i+1][0]<<"/"<<nd[i][1]<<endl;
         cout<<rd[i+1][0]<<"/"<<rd[i][1]<<endl;
         cout<<endl;
     }
    return 0;
}
请帮忙整改完成   Thanks♪(・ω・)ノ