#include<stdio.h>
#include<string.h>
struct information{
char name[200];
int old;
int great;
};
int greats(struct information *pr,int n);
int main(void)
{
int n,i,j;
while(~scanf("%d",&n))
{
struct information mes[1005];
for(i=0;i<n;i++)
scanf("%s%d%d",&mes[i].name,&mes[i].old,&mes[i].great);
greats(mes,n);
for(i=0;i<n;i++)
printf("%s %d %d\n",mes[i].name,mes[i].old,mes[i].great);
}
return 0;
}
int greats(struct information *pr,int n)
{
int i,j,temp;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(pr[i].great>pr[j].great)
{
temp=pr[i].great;
pr[i].great=pr[j].great;
pr[j].great=temp;
}
if(pr[i].great==pr[j].great)
{
int h=strcmp(pr[i].name,pr[j].name);
char temp[100];
if(h==1)
{
strcpy(temp,pr[i].name);
strcpy(pr[i].name,pr[j].name);
strcpy(pr[j].name,temp);
}
if(h==0)
{
if(pr[i].old>pr[j].old)
{
int temp;
temp=pr[i].old;
pr[i].old=pr[j].old;
pr[j].old=pr[i].old;
}
}
}
}
}
return 0;
}
试一试吧
#include<stdio.h>
#include<string.h>
struct information {
char name[200];
int old;
int great;
};
int greats(struct information *pr, int n);
int main(void)
{
int n, i, j;
while (scanf("%d", &n))
{
struct information mes[1005];
for (i = 0; i<n; i++)
scanf("%s%d%d", &mes[i].name, &mes[i].old, &mes[i].great);
greats(mes, n);
for (i = 0; i<n; i++)
printf("%s %d %d\n", mes[i].name, mes[i].old, mes[i].great);
}
return 0;
}
int greats(struct information *pr, int n)
{
int i, j;
information temp;
for (i = 0; i<n-1; i++)
{
for (j = i + 1; j<n; j++)
{
if (pr[i].great>pr[j].great)
{
temp = pr[i];
pr[i] = pr[j];
pr[j] = temp;
}
if (pr[i].great == pr[j].great)
{
int h = strcmp(pr[i].name, pr[j].name);
//char temp[100];
if (h == 1)
{
temp = pr[i];
pr[i] = pr[j];
pr[j] = temp;
}
if (h == 0)
{
if (pr[i].old>pr[j].old)
{
temp = pr[i];
pr[i] = pr[j];
pr[j] = temp;
}
}
}
}
}
return 0;
}
问题要求:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩