srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

yukicoder No.39 桁の数字を入れ替え

問題

問題概要

数字の一か所を入れ替えて、最も大きい数字を求める。

解法

数字を文字として扱う。文字列の一か所を入れ替えたものを全探索している。出来上がった文字列をstring型のvector配列にいれて、ソートする。数字だけじゃなくて、文字列もソートできる。

ミス

特になし。

コード

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <cstring>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    string n;
    cin >> n;
    vector<string> ans;
    ans.push_back(n);
    for (int i = 0; i < n.size(); ++i){
        for (int j = i + 1; j < n.size(); ++j){
            string tmp = n;
            swap(tmp[i], tmp[j]);
            ans.push_back(tmp);
        }
    }
    //降順に並び替える
    sort(ans.begin(), ans.end());
    reverse(ans.begin(), ans.end());
    cout << ans[0] << endl;
    return 0;
}