閱讀358 返回首頁    go 阿裏雲 go 技術社區[雲棲]


一種排序

一種排序
時間限製:3000 ms | 內存限製:65535 KB
難度:3

描述

現在有很多長方形,每一個長方形都有一個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;

現在要求按照一下方式排序(默認排序規則都是從小到大);


1.按照編號從小到大排序

2.對於編號相等的長方形,按照長方形的長排序;

3.如果編號和長都相同,按照長方形的寬排序;

4.如果編號、長、寬都相同,就隻保留一個長方形用於排序,刪除多餘的長方形;最後排好序按照指定格式顯示所有的長方形;

輸入
第一行有一個整數 0<n<10000,表示接下來有n組測試數據;
每一組第一行有一個整數 0<m<1000,表示有m個長方形;
接下來的m行,每一行有三個數 ,第一個數表示長方形的編號,

第二個和第三個數值大的表示長,數值小的表示寬,相等
說明這是一個正方形(數據約定長寬與編號都小於10000);
輸出
順序輸出每組數據的所有符合條件的長方形的 編號 長 寬
樣例輸入

1
8
1 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1

樣例輸出

1 1 1
1 2 1
1 2 2
2 1 1
2 2 1



//這裏我用了泛型算法裏麵的qsort函數,在頭文件<algorithm>中

隻要排好,在輸出的時候把重複的不輸出就可以了

代碼如下:

#include <iostream>
#include <algorithm>
using namespace std;

struct Square
{
public:
int no;//編號
int length;//長
int width;//寬
};

int cmp(const void *p, const void *q)
{
Square *s = (Square *)(p);
Square *s1 = (Square *)(q);

if (s->no != s1->no)
return s->no - s1->no > 0 ? 1 : -1;
else
{
if (s->length != s1->length)
return s->length - s1->length >0 ? 1 : -1;
else
{
if (s->width != s1->width)
return s->width - s1->width > 0 ? 1 : -1;
}
}

}

int main()
{
int n;

cin >> n; //n組測試數據
for (int test = 1; test <= n; test++)
{
int m;
cin >> m;//m個正方形
int a, b;
Square *s = new Square[m];
for (int i = 0; i < m; i++)
{
//*******************************
cin >> s[i].no >> a >> b;
if (a > b)
{
s[i].length = a;
s[i].width = b;
}
else
{
s[i].length = b;
s[i].width = a;
}
//*******************************
}
qsort(s, m, sizeof(s[0]), cmp);
cout << s[0].no << " " << s[0].length << " "
<< s[0].width << endl;
for (int i = 1; i < m; i++)
{
if (s[i].no == s[i-1].no && s[i].length == s[i-1].length
&& s[i].width == s[i-1].width)
continue;
cout << s[i].no << " " << s[i].length << " "
<< s[i].width << endl;

}
delete [] s;
}
return 0;
}


最後更新:2017-04-02 15:14:50

  上一篇:go 專訪騰訊CEO和360董事長
  下一篇:go 360大戰騰訊,不明真相網友六問“周大人”