题目:
输入数据第一行包含一个数N,接下有N行,每行一个实例,包含a,b两个数,现自定义一个结构体,将N行实例按a降序排列,如果a相等就按b升序排列。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct temp
{
int a,b;
};
typedef struct temp T;
bool cmp(T c,T d)//自定义排序方式
{
if(c.a!=d.a)//按a降序排列
return c.a>d.a;
if(c.b!=d.b)//如果a相同则按b升序排列
return c.b<d.b;
}
int main()
{
T d[100];
int n,i,j;
while(scanf("%d",&n)!=EOF){
i=0;
while(n--){
scanf("%d%d",&d[i++].a,&d[i].b);//在整条语句运行完后i+1,所以第二个d[i]不用写成d[i-1]
}
sort(d,d+i,cmp);//+i是指排序长度为i,所以实际上是[d,d+i)
for(j=0;j<i;j++){
printf("%d %d\n",d[j].a,d[j].b);
}
}
return 0;
}
感悟:
脑子又秀逗了,才a,b两个数我最开始居然又在用数组。。。然后大概了解到了sort函数的用法以及如何定义bool函数来决定sort的排序方式。