Pesquisar este blog

Livros Recomendados

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

sábado, 17 de setembro de 2022

URI (BEECROWD) - 3241 - Ajude um Candidato a PhD! - Iniciante - C e C++

Ajude o blog! PIX para doações: 6d8bc7a8-5d74-493a-ab7a-3515baf35956 (Please!!!)

Novo problema resolvido! Hoje tirei um tempinho para solucionar o "Ajude um Candidato a PhD!". Esse problema é recente, pois nunca o vi na plataforma, só hoje mesmo. Ele é simples de ser resolvido, confira abaixo como eu fiz!

Antes de resolver qualquer algoritmo do BEECROWD, recomenda-se seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar arquivos de entrada para teste, considerando as entradas de exemplo do URI, do udebug e outros valores limite;
  4. Preparar o ambiente de desenvolvimento e utilizar os mesmos parâmetros dos compiladores do URI
  5. Preparar um código-fonte padrão, já contendo a chamada às bibliotecas padrão, pré-processadores, retorno de função e um comando de escrita com "\n", pois no URI a grande maioria dos problemas exige a quebra de linha final.


Plataforma
: URI (BEECROWD)

Problema3241

Enunciado:

Jon Marius esqueceu como somar dois números enquanto fazia pesquisas para seu doutorado. E agora ele tem uma longa lista de problemas adicionais que precisa resolver, além dos de informática! Você pode ajudá-lo?

Em sua lista atual, Jon Marius tem dois tipos de problemas: problemas de adição na forma ”a + b” e o problema sempre recorrente ”P = NP”. Jon Marius é uma pessoa bastante distraída, então ele pode ter resolvido esse último problema várias vezes, já que sempre se esquece da solução. Além disso, ele gostaria de resolver esses problemas sozinho, portanto, você deve ignorá-los.

Linguagens: C e C++

Solução:

Resolvi o exercício lendo a linha inteira como texto. Depois disso, basta verificar se o texto é "P=NP", o que se faz com uma função de comparação de strings. Se ela for igual precisa imprimir skipped. Se for diferente, basta quebrar a linha por tokens. No nosso problema, o token é um delimitador e só pode ser "+". Pegamos os tokens antes e depois deste delimitador, convertemos para inteiro e somamos esses dois valores.

Código em C:
#include <stdio.h>
#include <string.h>

int main() {
    
    int n, n1, n2;
    char *token, linha[12];
    scanf("%i ", &n);
    
    while (n--) {
        scanf("%s ", linha);
        if (!strcmp(linha, "P=NP"))
            printf("skipped\n");
        else {
            token = strtok(linha, "+");
            n1 = atoi(token);
            token = strtok(NULL, "+");
            n2 = atoi(token);
            printf("%d\n", n1+n2);
        }
    }
    
    return 0;
}

Código em C++:
#include <iostream>
#include <string>

using namespace std;

int main() {
    
    int n, n1, n2;
    string linha, a, b;
    cin >> n;
    
    while (n--) {
        cin >> linha;
        if (!linha.compare("P=NP"))
            cout << "skipped" << endl;
        else {
            int pos = linha.find("+");
            n1 = stoi(linha.substr(0, pos));
            n2 = stoi(linha.substr(pos+1, linha.size()));
            cout << n1 + n2 << 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