Pesquisar este blog

Livros Recomendados

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

sábado, 30 de janeiro de 2021

URI - 1235 - De Dentro para Fora - Strings - C++

Plataforma: URI
Problema1235

Enunciado:

A sua impressora foi infectada por um vírus e está imprimindo de forma incorreta. Depois de olhar para várias páginas impressas por um tempo, você percebe que ele está imprimindo cada linha de dentro para fora. Em outras palavras, a metade esquerda de cada linha está sendo impressa a partir do meio da página até a margem esquerda. Do mesmo modo, a metade direita de cada linha está sendo impressa à partir da margem direita e prosseguindo em direção ao centro da página.

Por exemplo a linha:

THIS LINE IS GIBBERISH

está sendo impressa como:

I ENIL SIHTHSIREBBIG S

Da mesma forma, a linha " MANGOS " está sendo impressa incorretamente como "NAM  SOG". Sua tarefa é desembaralhar (decifrar) a string a partir da forma como ela foi impressa para a sua forma original. Você pode assumir que cada linha conterá um número par de caracteres.


Linguagem: C++


Solução:

Basicamente é necessário obter a metade da string "linha" e imprimir desde a metade (posição metade-1) até o início (posição 0) e depois da posição linha.size()-1 até a posição "metade".

#include <iostream>

using namespace std;

int main() {
    
    string linha;
    int testes;
    cin >> testes;
    cin.ignore();
    
    while (testes--) {
        
        getline(cin, linha);
        int metade = linha.size() % 2 + linha.size() / 2;
        
        for (int i = metade-1; i >= 0; i--)
            cout << linha[i];        
        
        for (int i = linha.size()-1; i >= metade; i--)
            cout << linha[i];
            
        cout << endl;
        
    }

    return 0;
}

URI - 1235 - De Dentro para Fora - Strings - C

Plataforma: URI
Problema1235

Enunciado:

A sua impressora foi infectada por um vírus e está imprimindo de forma incorreta. Depois de olhar para várias páginas impressas por um tempo, você percebe que ele está imprimindo cada linha de dentro para fora. Em outras palavras, a metade esquerda de cada linha está sendo impressa a partir do meio da página até a margem esquerda. Do mesmo modo, a metade direita de cada linha está sendo impressa à partir da margem direita e prosseguindo em direção ao centro da página.

Por exemplo a linha:

THIS LINE IS GIBBERISH

está sendo impressa como:

I ENIL SIHTHSIREBBIG S

Da mesma foma, a linha " MANGOS " está sendo impressa incorretamente como "NAM  SOG". Sua tarefa é desembaralhar (decifrar) a string a partir da forma como ela foi impressa para a sua forma original. Você pode assumir que cada linha conterá um número par de caracteres.


Linguagem: C


Solução:

A ideia do algoritmo abaixo foi dividir o array "linha" em duas partes: uma do início até a metade (das posições 0 até metade-1) e outra da posição metade até a posição strlen(linha)-1, ou seja, até o fim da linha. Com isso, basta utilizar estruturas de repetição e ler cada uma dessas partes do fim até o início.

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

int main() {
    
    char linha[102];
    int testes, i, metade;
    scanf("%d", &testes);
    getchar();
    
    while (testes--) {
        
        gets(linha);
        metade = strlen(linha) / 2;
        
        for (i = metade-1; i >= 0; i--)
            printf("%c", linha[i]);
        
        for (i = strlen(linha)-1; i >= metade; i--)
            printf("%c", linha[i]);
        
        printf("\n");
        
    }

    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