Problema "Procurando Subsequências" resolvido! Algoritmos devidamente divulgados pra vocês, bom proveito!!! :)
Plataforma: URI (BEECROWD)
Problema: 2126
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; }
#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