关键思路:建立一个数组used[]存放已经分组的人循环N/2次从前往后找且未分组从后往前找未分组且性别不同的。代码实现:#include stdio.h#include string.hstruct student {int sex;char name[9];};int main() {int N;scanf(%d, N);struct student stu[N];int used[N];for (int i 0; i N; i) {scanf(%d %s, stu[i].sex, stu[i].name);used[i] 0;}for (int i 0; i N / 2; i) {// 找最靠前的没分组的人int front 0;while (used[front]) {front;}// 找最靠后的异性int back N - 1;while(used[back]||stu[back].sex stu[front].sex) { //要注意性别不同back--;}// 输出printf(%s %s\n, stu[front].name, stu[back].name);// 标记已分组used[front] 1;used[back] 1;}return 0;}