Programação Competitiva

Algoritmo resolvidos e explicados da OBI e Maratona de Programação

  • Clipping de notícias
  • Dicas
    • Atribuição para várias variáveis com o mesmo valor
    • Entrada de vários conjuntos de teste até zeros [linguagem C]
    • Muitas saídas para serem mostradas
    • Saída com testes sequenciais [linguagem C]
    • Otimizações para o código
      • Melhorando o desempenho da entrada e saída [C++]
      • Utilize operadores bitwise
      • Shortcodes
  • Solução Computacional x Matemática
    • Importância de pensar os elementos de uma estrutura for
  • Sobre competições de programação
    • Sobre a maratona de programação
    • Sobre a OBI
    • Links para materiais da maratona
    • Links para materiais da OBI
      • Material introdutório para crianças
        • 1. Bem vindo ao maravilhoso mundo da programação
        • Aprendendo lógica com o Angry Birds
        • Blockly

Saída com testes sequenciais [linguagem C]

Uma forma bastante popular de saída de dados é indicação do caso de teste avaliado. Esse tipo de saída pode ser encontrado na questão Temperatura Lunar [OBI 2002].

A saída pode ser simplificada como:

  • Para cada conjunto de teste da entrada seu programa deve produzir três linhas.
  • A primeira linha identifica o conjunto de teste, no formato “Teste n”, onde n é numerado a partir de 1.

Sendo assim, é preciso indicar cada conjunto de testes com a palavra “Teste” e número do teste. Para isso, basta ter um contador com o número de testes realizados e isso é facilmente codificado conforme o código a seguir.

int main() {
  int teste = 1;

  while (...) {
      printf("Teste %d\n", teste);
      teste++; //instrução equivalente a teste=teste+1;
  }

  return 0;
}

Veja que foi definido uma estrutura de repetição que, a cada iteração, mostra o teste e sua numeração e depois incrementa o valor do teste.

No código abaixo são realizadas as duas ações (mostrar e incrementar o número do teste) em uma única instrução. Para entender melhor o operador ++ da linguagem C, recomendo a leitura de Qual a diferença entre x++ e ++x.

int main() {
  int teste = 1;

  while (...) {
      printf("Teste %d\n", teste++);
  }


  return 0;
}

Essa simplificação diminui a quantidade de instruções e ajuda a não esquecer de incrementar a variável de teste.

  • Sobre o blog

    Nesse blog estão reunidas explicações preparatórias para a Olimpíada Brasileira de Informática (OBI) e a Maratona de Programação.

    São trazidos problemas e resoluções comentadas.
  • Categorias

    • Competição (34)
      • Maratona de Programação (13)
      • OBI (21)
    • Linguagem (33)
      • C/C++ (32)
      • Python (8)
Proudly powered by WordPress Theme: Parament by Automattic.