杭十三中一班主任想根据学生独立做业分数编排座位,具体要求如下:
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♪(・ω・)ノ