2020年6月14日 星期日

a225: 明明愛排列 解題心得

題目來源: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;
}

沒有留言:

張貼留言

o079. 4. 最佳選擇

 題目描述: 給一個長度為 n 的正整數序列 a1,a2...an ,你可以執行多次操作 (包含 0 次),每次操作只能選擇這個序列的第一個或最後一個數字,再將這個數字從序列中刪除並自己搜集起來。 求滿足總和不超過 k 且搜集的數字奇數和偶數個數相同的條件下,所能搜集的數字總和最...