Problema: 1244
Enunciado: Crie um programa para ordenar um conjunto de strings pelo seu tamanho. Seu programa deve receber um conjunto de strings e retornar este mesmo conjunto ordenado pelo tamanho das palavras, se o tamanho das strings for igual, deve-se manter a ordem original do conjunto.
Linguagem: C++
Para cada linha lida, foi buscado por um espaço em branco. Ao encontrar o espaço em branco, as substrings compondo aquela palavra foram adicionadas a um vetor chamado vet, juntamente com seu tamanho.
Após ter percorrido toda a linha, foi aplicada uma ordenação, onde a função stable_sort foi sobrecarregada para ordenar do maior para o menor. Além disso, foi utilizada a função stable_sort ao invés de apenas sort para manter a ordenação original em duas palavras de mesmo tamanho.
Posteriormente, foi impresso apenas as palavras do vetor ordenado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <iostream> #include <vector> #include <utility> #include <algorithm> using namespace std; bool sortInverse(const pair<int,string> &a, const pair<int,string> &b){ return (a.first > b.first); } int main(){ int n, i, string_size; string linha; vector< pair <int, string> > vet; cin >> n; getline(cin, linha); while(n--){ vet.clear(); getline(cin, linha); int pos_ini = 0; for(i=0; i<linha.size(); i++){ if(linha[i]==' '){ string_size = i-pos_ini; string substring = linha.substr(pos_ini, string_size); vet.push_back(make_pair(string_size, substring)); pos_ini = i+1; } } string_size = i-pos_ini; string substring = linha.substr(pos_ini, string_size); vet.push_back(make_pair(string_size, substring)); stable_sort(vet.begin(),vet.end(),sortInverse); cout << vet.at(0).second; for(int i=1;i<vet.size();i++){ cout << " " << vet.at(i).second; } cout << endl; } return 0; } |
Nenhum comentário:
Postar um comentário