题目描述
**
选夫婿1
输入数据的第一行是一个正整数N(0 < N < 1000)。然后N行数据,每行包含三部分,用空格隔开。第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300),第三部分是整数体重w (0 < w < 200)。最后一行是四个整数a,b,c,d.表示身高的合格范围是[a,b],体重的合格范围是[c,d](0 < a < b < 200, 0 < c < d < 300)。你需要把合格的信息按照身高从低到高输出,格式每行三个信息,共N行,如果身高相同则按体重从轻到重输出,若没有合格人选则输出No.**
#include<stdio.h>
struct sdut
{
char name[21];
int h,w;
}s[1001],t;
int main()
{
int n,i,a,b,c,d,j,k=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s%d%d",&s[i].name,&s[i].h,&s[i].w);
scanf("%d%d%d%d",&a,&b,&c,&d);
for(i=1;i<=n;i++)
{
if(a<=s[i].h&&b>=s[i].h&&c<=s[i].w&&d>=s[i].w)
{
k++;
s[k]=s[i];
}
}
for(i=1;i<=k;i++)
{
for(j=1;j<=k-i;j++)
{
if(s[j].h>s[j+1].h)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
else if(s[j].h==s[j+1].h&&s[j].w>s[j+1].w)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
if(k==0)
printf("No\n");
else
for(i=1;i<=k;i++)
printf("%s %d %d\n",s[i].name,s[i].h,s[i].w);
return 0;
}