|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
我的思路就是用四个指针,两个指向排名最前的男生和女生,两个指向排名最后的男生和女生,然后每输出一对就把相应的额指针移位,直到指针相遇之后结束循环。
只有最后一个一分的测试点死活过不去,不知道是哪个细节出了问题,求指教啊 |
|