马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
我的代码:#include <bits/stdc++.h>
using namespace std;
#define N 50
typedef struct STU{
int sex;
string name;
} STU;
STU stu[N];
int search_boy_s(int, int);
int search_girl_s(int, int);
int search_boy_e(int);
int search_girl_e(int);
int main()
{
int n;
cin >> n;
int boy_s = -1, girl_s = -1, boy_e = -1, girl_e = -1;
for (int i = 0; i < n; i++){
cin >> stu[i].sex >> stu[i].name;
if(boy_s == -1 && stu[i].sex == 1)
boy_s = i;
if(girl_s == -1 && stu[i].sex == 0)
girl_s = i;
}
for (int i = n - 1; i >= 0; i--){
if(boy_e != -1 && girl_e != -1)
break;
if(boy_e == -1 && stu[i].sex == 1)
boy_e = i;
if (girl_e == -1 && stu[i].sex == 0)
girl_e = i;
}
int index = 0;
while(boy_s <= boy_e || girl_s <= girl_e){
int current_sex = stu[index].sex, search_sex = 1 - stu[index].sex;
cout << stu[index].name << " " << (current_sex == 1 ? stu[girl_e].name : stu[boy_e].name) << endl;
if(current_sex == 1){
boy_s = search_boy_s(boy_s, n);
girl_e = search_girl_e(girl_e);
}else{
girl_s = search_girl_s(girl_s, n);
boy_e = search_boy_e(boy_e);
}
index++;
if(boy_s == -1 && girl_s == -1 && boy_e == -1 && girl_e == -1)
break;
}
system("pause");
return 0;
}
int search_boy_s(int i, int n){
for (int start = i + 1; start < n; start++)
if(stu[start].sex == 1)
return start;
return -1;
}
int search_girl_s(int i, int n){
for (int start = i + 1; start < n; start++)
if (stu[start].sex == 0)
return start;
return -1;
}
int search_boy_e(int i){
for (int end = i - 1; end >= 0; end--)
if(stu[end].sex == 1)
return end;
return -1;
}
int search_girl_e(int i){
for (int end = i - 1; end >= 0; end--)
if (stu[end].sex == 0)
return end;
return -1;
}
我的思路就是用四个指针,两个指向排名最前的男生和女生,两个指向排名最后的男生和女生,然后每输出一对就把相应的额指针移位,直到指针相遇之后结束循环。
只有最后一个一分的测试点死活过不去,不知道是哪个细节出了问题,求指教啊 |