排座位用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名女生。
我是该班的一名学生,受班主任委托排座位。由于技术不行,难以完成。
目前的代码如下(仅到第三步,而且有些小问题):
(变量意义:
boynum:男生人数;girlnum:女生人数;stunum:总人数;
boycan:男生桶排:[0] [1]学号;girlcan:女生桶排:[0] [1]学号;
boygrade:男生成绩;girlgrade:女生成绩;boyrank:男生排名;girlrank:女生排名;
st:一组;nd:二组;rd:三组 )

#include<bits/stdc++.h>

using namespace std;

int boynum,girlnum,stunum,boycan[2241][2],girlcan[2241][2];

int boygrade[30],girlgrade[30],boyrank[30],girlrank[30],st[10][3],nd[10][3],rd[10][3];

int main(){

cin>>boynum>>girlnum;

stunum=boynum+girlnum;

for(int i=1;i<=boynum;i++){

cout<<i<<" ";

float j;

cin>>j;

boygrade[i]=int(4*j);

}

for(int i=boynum+1;i<=stunum;i++){

cout<<i<<" ";

int j;

cin>>j;

girlgrade[i-boynum]=4*j;

}

//输入

for(int i=0;i<=boynum;i++){

boycan[boygrade[i]][0]++;

boycan[boygrade[i]][1]=i;

}

for(int i=1;i<=girlnum;i++){

girlcan[girlgrade[i]][0]++;

girlcan[girlgrade[i]][1]=i;

}

for(int i=0;i<=boynum;i++){

for(int j=2240;j>-1;){

if(boycan[j][0]>0){

boyrank[i]=boycan[j][1];

}

}

}

for(int i=0;i<=girlnum;i++){

for(int j=2240;j>-1;){

if(girlcan[j][0]>0){

girlrank[i]=girlcan[j][1];

}

}

}

//桶排

for(int i=1;i<=9;i++){

int j=10-i;

st[i][0]=boyrank[i];

st[i][1]=girlrank[j];

}

for(int i=10;i<=18;i++){

int j=28-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=1;i<=9;i++){

int j=10-i;

rd[i][0]=boyrank[i];

rd[i][1]=girlrank[j];

}

//配对

for(int i=1;i<=9;i++){

cout<<i<<" ";

cout<<st[i][0]<<" "<<st[i][1]<<endl;

cout<<nd[i][0]<<" "<<nd[i][1]<<endl;

cout<<rd[i][0]<<" "<<rd[i][1]<<endl;

}

return 0;

}

请程序猿们帮忙改善完成,Thanks♪(・ω・)ノ