Pesquisar este blog

Livros Recomendados

quarta-feira, 3 de março de 2021

URI (BEECROWD) - 2126 - Procurando Subsequências - Iniciante - C e C++

Problema "Procurando Subsequências" resolvido! Algoritmos devidamente divulgados pra vocês, bom proveito!!! :)

Plataforma: URI (BEECROWD)

Problema2126

Enunciado:

Dados dois números naturais N1 e N2, diz-se que N1 é subsequência contígua de N2 se todos os dígitos de N1 aparecem, na mesma ordem e de forma contígua, em N2. Crie uma aplicação que leia dois números naturais e diga se o primeiro é uma subsequência contígua do segundo.

Linguagens: C e C++


Solução:

Os códigos abaixo são semelhantes, em C e C++. Uma pequena diferença reside na obtenção do tamanho da string. Em C fiz a função getTamanho, em C++ já usei length(), disponível para strings.

Código em C:

#include <stdio.h>
#include <string.h>

int getTamanho(char *palavra) {
    int indice = 0;
    
    while (palavra[indice++] != '\0');
    return indice;
}

int main() {
    char n1[11], n2[33];
    int tam, indice, qtd, ultima, contador = 1;
    
    while (scanf("%s ", n1) != EOF) {
        scanf("%s ", n2);
        
        tam = getTamanho(n1);
        indice = 0;
        qtd = 0;
        char comparador[tam];
        
        while (indice < getTamanho(n2)) {
            strncpy(comparador, n2 + indice++, tam);
            comparador[tam-1] = '\0';
            
            if (!strcmp(comparador, n1)) {
                qtd++;
                ultima = indice;
            }
        }
        
        printf("Caso #%i:\n", contador++);
        
        if (qtd) {
            printf("Qtd.Subsequencias: %i\n", qtd);
            printf("Pos: %i\n\n", ultima);
        }
        else
            printf("Nao existe subsequencia\n\n");
    }

    return 0;
}

Código em C++
:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main() {
    string n1, n2, comparador;
    int tam, indice, qtd, ultima, contador = 1;
    
    while (getline(cin, n1)) {
        getline(cin, n2);
        
        tam = n1.length();
        indice = 0;
        qtd = 0;

        while (indice < n2.length()) {
            
            comparador = n2.substr(indice++, tam);
            
            if (!comparador.compare(n1)) {
                qtd++;
                ultima = indice;
            }
        }
        
        cout << "Caso #" << contador++ << ":" << endl;
        
        if (qtd) {
            cout << "Qtd.Subsequencias: " << qtd << endl
                 << "Pos: " << ultima << endl << endl;
        }
        else
            cout << "Nao existe subsequencia" << endl << endl;
    }
    
    return 0;
}

Nenhum comentário:

Postar um comentário

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