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