題目來源:https://zerojudge.tw/ShowProblem?problemid=a225
明明有自己獨特的排列數組的方式,EX:如果數字有 38 106 98 26 13 46 51 的話,那麼 51 會排最前面,因為個位數字 1 是其中最小的一個。
而 106 26 46 這三個數字,個位數同樣都是 6,所以明明會直接將他們由大至小排,也就是 106 46 26。
所以,排好之後是:51 13 106 46 26 98 38。
輸入有多組,每組的第一行有一個正整數,代表接下來會有幾個數字要被排序。
這題只是在基本的排序規則上,再多加了一些條件,其實本身的問題不大。
以下附上程式碼:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
while(cin >> n) {
vector<pair<int , int>> v;
for(int i = 0; i < n; i++) {
int x;
cin >> x;
pair<int , int> p;
p.first = x % 10;
p.second = x;
bool find = false;
for(int j = 0; j < i; j++) {
if(v[j].first > p.first || (v[j].first == p.first && v[j].second < p.second)) {
v.insert(v.begin() + j , p);
find = true;
break;
}
}
if(!find) v.push_back(p);
}
for(int i = 0; i < n; i++) {
cout << v[i].second << " ";
}
cout << endl;
}
return 0;
}
沒有留言:
張貼留言