qsort 三级排序
生活随笔
收集整理的這篇文章主要介紹了
qsort 三级排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
nyoj ? ? ? ? ? ? ? ? 一種排序
描述1.按照編號從小到大排序
2.對于編號相等的長方形,按照長方形的長排序;
3.如果編號和長都相同,按照長方形的寬排序;
4.如果編號、長、寬都相同,就只保留一個長方形用于排序,刪除多余的長方形;最后排好序按照指定格式顯示所有的長方形; 輸入
每一組第一行有一個整數 0<m<1000,表示有m個長方形;
接下來的m行,每一行有三個數 ,第一個數表示長方形的編號,
第二個和第三個數值大的表示長,數值小的表示寬,相等
說明這是一個正方形(數據約定長寬與編號都小于10000);
cpp:
#include<stdio.h> #include<stdlib.h> #define MAX 1000 #define swap(a,b) {t=a;a=b;b=t;} int t; struct node {int no;int l;int w; }; node a[MAX]; int cmp(const void *a,const void *b) {struct node *c=(node *)a;struct node *d=(node *)b;if(c->no==d->no){if(c->l==d->l){return c->w-d->w;}else return c->l-d->l;}else return c->no-d->no; } int main() {int T;scanf("%d",&T);while(T--){int m,i;scanf("%d",&m);for(i=0;i<m;i++){scanf("%d%d%d",&a[i].no,&a[i].l,&a[i].w);if(a[i].l<a[i].w) swap(a[i].l,a[i].w);}qsort(a,m,sizeof(node),cmp);for(i=0;i<m-1;i++){if(a[i].no==a[i+1].no&&a[i].l==a[i+1].l&&a[i].w==a[i+1].w)continue;printf("%d %d %d\n",a[i].no,a[i].l,a[i].w);}printf("%d %d %d\n",a[m-1].no,a[m-1].l,a[1].w);}return 0; }總結
以上是生活随笔為你收集整理的qsort 三级排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC CStringArray 字符串
- 下一篇: 【摘苹果】scratch蓝桥杯集训题目