【问题描述】设有n个人的姓名和年龄存在数组中,输出这些人年龄居中的年龄,和同年龄的所有人姓名(如多人,姓名按字母顺序排序),如偶数算中间两人平均值,没有相同年龄则输出error。
【输入形式】人数 姓名 年龄
【输出形式】年龄 姓名
【样例输入】
5
Ewry 32
Jdkfg 54
Dfhsj 20
Kvirk 32
Sgkf 53
【样例输出】32 Ewry Kvirk
定义数组,排序,得到中间年龄。再按年龄比较输出该年龄的人
#include <stdio.h>
#include <string.h>
typedef struct _person
{
char name[20];
int age;
}person;
int main()
{
int n,mid;
person p[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s %d",p[i].name,&p[i].age);
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
{
if(p[j].age > p[j+1].age)
{
person t = p[j];
p[j] = p[j+1];
p[j+1] = t;
}
else if(p[j].age == p[j+1].age && strcmp(p[j].name,p[j+1].name) > 0)
{
person t = p[j];
p[j] = p[j+1];
p[j+1] = t;
}
}
if(n%2==0)
mid = (p[n/2-1].age+p[n/2].age)/2;
else
mid = p[n/2].age;
int count = 0;
for(int i=0;i<n;i++)
{
if(p[i].age == mid)
{
if(count == 0)
printf("%d %s",p[i].age,p[i].name);
else
printf(" %s",p[i].name);
count++;
}
}
if(count==0)
printf("error");
return 0;
}