qsort 三级排序
生活随笔
收集整理的這篇文章主要介紹了
qsort 三级排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
nyoj ? ? ? ? ? ? ? ? 一種排序
描述1.按照編號(hào)從小到大排序
2.對(duì)于編號(hào)相等的長(zhǎng)方形,按照長(zhǎng)方形的長(zhǎng)排序;
3.如果編號(hào)和長(zhǎng)都相同,按照長(zhǎng)方形的寬排序;
4.如果編號(hào)、長(zhǎng)、寬都相同,就只保留一個(gè)長(zhǎng)方形用于排序,刪除多余的長(zhǎng)方形;最后排好序按照指定格式顯示所有的長(zhǎng)方形; 輸入
每一組第一行有一個(gè)整數(shù) 0<m<1000,表示有m個(gè)長(zhǎng)方形;
接下來(lái)的m行,每一行有三個(gè)數(shù) ,第一個(gè)數(shù)表示長(zhǎng)方形的編號(hào),
第二個(gè)和第三個(gè)數(shù)值大的表示長(zhǎng),數(shù)值小的表示寬,相等
說(shuō)明這是一個(gè)正方形(數(shù)據(jù)約定長(zhǎng)寬與編號(hào)都小于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; }總結(jié)
以上是生活随笔為你收集整理的qsort 三级排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MFC CStringArray 字符串
- 下一篇: 【摘苹果】scratch蓝桥杯集训题目