L1-030 一帮一
1.思路
1.先看题目,正偶数个学生,则可以考虑将其分成两部分(当时没注意这个条件,一脸懵逼),然后由上部分的学生和下部分的学生相匹配。
2.这里也用到了结构体,太久没用了,做题时也没想到。
3.利用for循环将学生进行匹配和输出,输出后,则将已输出的学生进行标记
4.匹配后也要进行标记,以便跳出寻找的循环,重新进入匹配
2.源码
#include<stdio.h>
#include<math.h>
#include<string.h>
struct node{
int a;
char name[9];
}p[50];
int main()
{
int n;
scanf("%d", &n);
int flag;
for(int i = 0; i < n ;i++)
{
scanf("%d %s", &p[i].a, p[i].name);
}
for(int i = 0; i < n/2; i++)//名次高女生和男生排序
{
flag = 0;
printf("%s", p[i].name);
if(p[i].a == 0)
{
for(int j = n-1; j >= n/2; j--)
{
if(p[j].a == 1&&p[j].a!= 2)
{
printf(" %s\n",p[j].name);
p[j].a = 2; //匹配:将已匹配的学生进行标记,再次进入循环则不会输出
flag = 1; //寻找:匹配到学生后,则跳出寻找,重新匹配学生
}
if(flag == 1)
break;
}
}
else if(p[i].a == 1)
{
for(int j = n-1; j >= n/2; j--)
{
if(p[j].a == 0&&p[j].a!= 2)
{
printf(" %s\n",p[j].name);
p[j].a = 2;
flag = 1;
}
if(flag == 1)
break;
}
}
}
return 0;
}