Durante o curso de Algoritmos e Programação de Computadores você irá passar por alguns problemas na hora de enviar a sua questão para o OJ (Online Judge).
Essa seção será resposável por aprensentar e exemplificar os erros mais comuns que voce provavelmente irá passar. Como não será o professor ou monitor que irá corrirgir a submissão de cada código de cada aluno, o sistema foi programado para corrigir e julgar seu código de acordo com apenas 1 critério : caso todos os inputs apresentados por ele retorne como resultado algo exatamente igual o seu gabarito (output), então o seu código está correto, caso contrário ele está errado.
Possivelmente os códigos que foram julgados como errados irão receber um dos seguintes erros que serão analisados no tópico seguinte
Sem a menor dúvida WA é o tipo de erro mais comum e TODOS ainda vão receber um durante o curso.
Este tipo de erro ocorre basicamente quando a resposta retornada não bate com o gabarito. Como por exemplo, caso o problema seja somar 2 números e para um input 5 5
seu programa retorna qualquer coisa diferente de 10
ele irá julgar seu programa com o veredito de resposta errada (WA).
Exemplo de programa que irá receber WA caso o proposto seja ler 2 números e imprimir ambos trocados
int x, y, aux; scanf("%d %d", &x, &y); aux = x; x = y; y = aux; printf("%d%d\n", x, y);
Este tipo de programa irá retornar o veredito de WA pois caso o input seja 7 8
, ao invés do código retornar 8 7
ele irá retornar 87
que não é a resposta correta
Este tipo de erro é bastante comum para o pessoal iniciante que está realizando submissões, principalmente, no site do URI.
O código recebe esse veredito quando sua resposta não está identada corretamente, ou seja, não apresenta a quebra de linha (\n)
corretamente
Exemplo de programa que irá receber PE caso o proposto seja ler 1 número e imprimir 2 linhas, no qual a primeira é o número lido ao quadrado e na segunda linha o número ao cubo
int x; scanf("%d", &x); printf("%d %d\n", x*x, x*x*x);
Este tipo de programa irá retornar o veredito de PE pois caso o input seja 2
a saida deveria ser 2 linhas contendo os números 4
e 8
, porém este código retorna apenas 1 linha1 com a resposta "correta", porém identada de forma incorreta.
Este tipo de erro é bastante comum para o pessoal iniciante, similar ao PE .
O código recebe esse veredito quando não consegue se compilado na hora do sistema realizar os testes.
Exemplo de programa que irá receber CE caso o proposto seja ler 1 número e imprimir seu dobro
int y; scanf("%d", &x); printf("%d\n", x*2);
Este tipo de programa irá retornar o veredito de CE o programa está salvando o valor lido na variável x, porém essa variável não foi declarada, logo irá ocorrer erro na hora da compilação.
Este tipo de erro é bastante comum e acontece bastante quando o programador está aprendendo vetores.
O código recebe esse veredito, na maioria das vezes, quando o programa acessa um posição inválida de memória, geralmente ocorre quando temos um vetor e se tenta acessar um index que não existe.
Exemplo de programa que irá receber RTE caso o proposto seja ler n
números e imprimí-los de trás para frente.
int n,i; scanf("%d", &n); int v[n]; for(i = 0; i <= n; i++){ scanf("%d", &v[i]); } for(i = n; i >= 0; i--){ printf("%d ", v[i]); } printf("\n");
Este tipo de programa irá retornar o veredito de RE pois como o código cria um vetor de tamanho n
, então suas posições vão de 0 ~ n-1
e como no laço de repetição está de 0 ~ n
, na última iteração do primeiro for será acessado a posição v[n]
que não existe, fazendo com que o programa não esteja correto.
Este também acontece, porém com uma menor frequência que os outros e está relacionado ao tempo de execução.
O código recebe esse veredito quando sua solução extrapola o tempo limite definido. Seu programa não terminou de executar no tempo pré-determinado, por isso foi interrompido. Este tipo de erro pode acontecer quando seu programa entra em um loop infinito ou a sua solução apenas demora muito para ser finalizada.
Exemplo de programa que irá receber TLE caso o proposto seja ler um número n
e imprimir todos os números de n
até 1
int n,i; scanf("%d", &n); for(i = n; i >= 1; i++){ scanf("%d ", i); } printf("\n");
Este tipo de programa irá retornar o veredito de TLE pois o programador está fazendo um loop decrescente com a condição de parada com i >= 1
, porém no último campo do laço de repetição ele incrementa a variável, fazendo com que o número sempre cresça e nunca fique menor do que 1, entrando em um loop infinito.