C语言代码:自动分组学生,实现“一帮一学习小组”
C语言代码:自动分组学生,实现“一帮一学习小组”
问题描述: “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式: 输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。
输出格式: 每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda
输出样例:
Amy Jack
Tom Linda
Bill Maya
Cindy John
思路: 由于要按照名次从高到低分配,所以我们可以将学生按照名次从高到低存储在一个结构体数组中,这样可以方便后面的操作。然后依次遍历结构体数组,如果该学生还没有被分组,就与他后面第一个未分组的异性学生配对,然后打标记表示这两个学生已经被分组了。最后按照名次从高到低输出所有的小组即可。
**注意:**题目中要求分组的是异性学生,因此我们需要保存当前未分组的最后一个男生和女生的位置,这样可以方便后面的操作。
C语言 代码:
#include <stdio.h>
#include <string.h>
#define MAX_NUM 50
struct Student {
int gender; // 0: female, 1: male
char name[9];
int group; // 0: not grouped, 1: grouped
};
int main() {
int n, i;
struct Student students[MAX_NUM];
int last_male = -1, last_female = -1;
scanf('%d', &n);
for (i = 0; i < n; i++) {
scanf('%d %s', &students[i].gender, students[i].name);
students[i].group = 0; // 初始化所有学生为未分组
}
for (i = 0; i < n; i++) {
if (students[i].group == 0) { // 如果该学生未分组
if (students[i].gender == 0) { // 女生
if (last_male != -1) { // 如果有未分组的男生
printf('%s %s
', students[i].name, students[last_male].name);
students[i].group = 1;
students[last_male].group = 1;
last_male = -1; // 更新最后一个未分组的男生位置
}
else {
last_female = i; // 记录最后一个未分组的女生位置
}
}
else { // 男生
if (last_female != -1) { // 如果有未分组的女生
printf('%s %s
', students[i].name, students[last_female].name);
students[i].group = 1;
students[last_female].group = 1;
last_female = -1; // 更新最后一个未分组的女生位置
}
else {
last_male = i; // 记录最后一个未分组的男生位置
}
}
}
}
return 0;
}
代码解释:
- **结构体定义:**定义一个名为
Student的结构体,包含学生的性别、姓名和分组状态。 - **输入数据:**使用
scanf函数输入学生人数和每个学生的性别和姓名,并将数据存储在students数组中。 - **分组逻辑:**使用循环遍历
students数组,如果当前学生未分组,则判断其性别:- 如果是女生,则查找最后一个未分组的男生,如果找到则配对并标记为已分组,否则记录当前女生为最后一个未分组的女生。
- 如果是男生,则查找最后一个未分组的女生,如果找到则配对并标记为已分组,否则记录当前男生为最后一个未分组的男生。
- **输出结果:**根据分组结果,按名次从高到低输出所有的小组。
注意:
代码中使用了 last_male 和 last_female 变量来记录最后一个未分组的男生和女生的位置,以便在配对时快速查找。
希望这个代码能够帮助你实现自动分组功能!
原文地址: https://www.cveoy.top/t/topic/oPIw 著作权归作者所有。请勿转载和采集!