Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 2165. Mostrar todas as postagens
Mostrando postagens com marcador 2165. Mostrar todas as postagens

sábado, 30 de janeiro de 2021

URI - 1244 - Ordenação por Tamanho - Estruturas - C

Plataforma: URI
Problema1244

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


Solução:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const char a[], const char b[]) {
    return strlen(a) < strlen(b);
}

int main() {
    
    int n, pos, i, j;
    char palavras[51][51];
    char linha[2700];
    char *token;
    
    scanf("%i ", &n);
    
    while (n--) {
        fgets(linha, 3000, stdin);
        pos = 0;
        token = strtok(linha, " \n");
        for (i = 0; token != NULL; i++) {
            strncpy(palavras[i], token, 50);
            token = strtok(NULL, " \n");
        }
        
        qsort(palavras, i, 51, compare);
        for (j = 0; j < i - 1; j++)
            printf("%s ", palavras[j]);
        printf("%s\n", palavras[j]);
        
        memset(palavras, 0, sizeof(palavras));
    }

    return 0;
}

URI - 1244 - Ordenação por Tamanho - Estruturas - C++ - Solução Alternativa

Plataforma: URI
Problema1244

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++


Solução:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

bool compara(const string &a, const string &b) {
    return a.size() > b.size();
}

int main() {
    
    int n, pos, i;
    string linha, sep = " ", token;
    vector<string> palavras;
    
    cin >> n;
    cin.ignore();
    
    while (n--) {
        getline(cin, linha);
        pos = 0;
        while ((pos = linha.find(sep)) != string::npos) {
            
            token = linha.substr(0, pos);
            palavras.push_back(token);
            linha.erase(0, pos + sep.length());
            
        }
        palavras.push_back(linha);
        stable_sort(palavras.begin(), palavras.end(), compara);

        for (i = 0; i < palavras.size()-1; i++)
            cout << palavras.at(i) << " ";
        cout << palavras.at(i) << endl;
        
        palavras.clear();
    }

    return 0;
}

sábado, 25 de abril de 2020

URI - 1244 - Ordenação por Tamanho - Estruturas - C++

Plataforma: URI
Problema1244

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++

Solução:
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;
}

sexta-feira, 24 de abril de 2020

URI (BEECROWD) - 2165 - Tuitando - Iniciante - C e C++

O problema Tuitando foi divertido de resolver! Fiz três soluções em duas linguagens diferentes. Abaixo você encontra todas elas!

Plataforma
: URI (BEECROWD)

Problema2165

Enunciado:
O microblog Twitter é conhecido por limitar as postagens em 140 caracteres. Conferir se um texto vai caber em um tuíte é sua tarefa.

Linguagens: C e C++

Solução:

Código em C:

Foi criado um ponteiro de char (tweet). Utilizanod gets foi feita a leitura do texto e depois foi obtido o tamanho do tweet (a instrução while foi feita para isso e a variável tam recebe, ao final do laço, o tamanho do texto). Se o tamanho for maior, imprime MUTE, senão imprime TWEET. Não esqueça da quebra de linha!

#include <stdio.h>

int main() {
    int tam = 0;
    char *tweet = (char *) malloc(sizeof(char) * 501);
    
    gets(tweet);
        
    while (tweet[tam] != '\0')
        tam++;
    
    if (tam > 140)
        printf("MUTE\n");
    
    else
        printf("TWEET\n");

    return 0;
}

Código em C++:

A solução aqui foi fazer a leitura completa da linha utilizando getline. Após, percorreu-se tweet até encontrar \0 para saber o tamanho do texto. Caso o tamanho seja menor ou igual a 140, então é impresso TWEET na saída, caso contrário é impresso MUTE na saída.

#include <iostream>

using namespace std;

int main() {
    int tam = 0;
    string tweet;
    
    getline(cin, tweet);
        
    while (tweet[tam] != '\0')
        tam++;
    
    if (tam > 140)
        cout << "MUTE" << endl;
    
    else
        cout << "TWEET" << endl;

    return 0;
}

Código em C++ (solução alternativa):

Aqui também usei getline, mas depois foi verificado o tamanho da linha utilizando line.size diretamente. O resto do código segue a mesma lógica do código anterior.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <iostream>
using namespace std;

int main(){
 string linha;
 getline(cin, linha);
 if(linha.size()<=140) cout << "TWEET"<<endl;
 else cout << "MUTE" << endl;
 
 return 0;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas