quarta-feira, 3 de outubro de 2018

URI PROBLEMA 1129 - Leitura Ótica SOLUÇÃO EM C

URI Online Judge | 1129

Leitura Ótica

Maratona de Programação da SBC  Brasil
Timelimit: 1
O professor João decidiu aplicar somente provas de múltipla escolha, para facilitar a correção. Em cada prova, cada questão terá cinco alternativas (A, B, C, D e E), e o professor vai distribuir uma folha de resposta para cada aluno. Ao final da prova, as folhas de resposta serão escaneadas e processadas digitalmente para se obter a nota de cada aluno. Inicialmente, ele pediu ajuda a um sobrinho, que sabe programar muito bem, para escrever um programa para extrair as alternativas marcadas pelos alunos nas folhas de resposta. O sobrinho escreveu uma boa parte do software, mas não pode terminá-lo, pois precisava treinar para a Maratona de Programação.

Durante o processamento, a prova é escaneada usando tons de cinza entre 0 (preto total) e 255 (branco total). Após detectar os cinco retângulos correspondentes a cada uma das alternativas, ele calcula a média dos tons de cinza de cada pixel, retornando um valor inteiro correspondente àquela alternativa. Se o quadrado foi preenchido corretamente o valor da média é zero (preto total). Se o quadrado foi deixado em branco o valor da média é 255 (branco total). Assim, idealmente, se os valores de cada quadrado de uma questão são (255, 0, 255, 255, 255), sabemos que o aluno marcou a alternativa B para essa questão. No entanto, como as folhas são processadas individualmente, o valor médio de nível de cinza para o quadrado totalmente preenchido não é necessariamente 0 (pode ser maior); da mesma forma, o valor para o quadrado não preenchido não é necessariamente 255 (pode ser menor). O prof. João determinou que os quadrados seriam divididos em duas classes: aqueles com média menor ou igual a 127 serão considerados pretos e aqueles com média maior a 127 serão considerados brancos.

Obviamente, nem todas as questões das folhas de resposta são marcadas de maneira correta. Pode acontecer de um aluno se enganar e marcar mais de uma alternativa na mesma questão, ou não marcar nenhuma alternativa. Nesses casos, a resposta deve ser desconsiderada.

O professor João necessita agora de um voluntário para escrever um programa que, dados os valores dos cinco retângulos correspondentes às alternativas de uma questão determine qual a alternativa corretamente marcada, ou se a resposta à questão deve ser desconsiderada.

Entrada

A entrada contém vários casos de teste. A primeira linha de um caso de teste contém um número inteiro Nindicando o número de questões da folha de respostas (1 ≤ N ≤ 255). Cada uma das N linhas seguintes descreve a resposta a uma questão e contém cinco números inteiros ABCD e E, indicando os valores de nível de cinza médio para cada uma das alternativas da resposta (0 ≤ ABCDE ≤ 255).

O ultimo caso de teste é seguido por uma linha que contém apenas um número zero.

Saída

Para cada caso de teste da entrada seu programa deve imprimir N linhas, cada linha correspondendo a uma questão. Se a resposta à questão foi corretamente preenchida na folha de resposta, a linha deve conter a alternativa marcada (‘A’, ‘B’, ‘C’, ‘D’ ou ‘E’). Caso contrário, a linha deve conter o caractere ‘*’ (asterisco).



#include <stdio.h>

int main()
{
    int N, A, B, C, D, E, i, count;

    while(scanf("%d", &N) != 0){
        if(N == 0){
            break;
        }
        for(i = 0; i < N; i++){
            scanf("%d %d %d %d %d", &A, &B, &C, &D, &E);
            count = 0;

            if(A <= 127){
                count++;
                A = 1;
            }
            else{
                A = 0;
            }
            if(B <= 127){
                count++;
                B = 1;
            }
            else{
                B = 0;
            }
            if(C <= 127){
                count++;
                C = 1;
            }
            else{
                C = 0;
            }
            if(D <= 127){
                count++;
                D = 1;
            }
            else{
                D = 0;
            }
            if(E <= 127){
                count++;
                E = 1;
            }
            else{
                E = 0;
            }

            if(count == 1){
                if(A == 1){
                    printf("A\n");
                }
                if(B == 1){
                    printf("B\n");
                }
                if(C == 1){
                    printf("C\n");
                }
                if(D == 1){
                    printf("D\n");
                }
                if(E == 1){
                    printf("E\n");
                }
            }
            else{
                printf("*\n");
            }
        }
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

URI PROBLEMA 1133 - Resto da Divisão SOLUÇÃO EM C

URI Online Judge | 1133 Resto da Divisão Adaptado por Neilor Tonin, URI   Brasil Timelimit: 1 Escreva um programa que leia 2 valo...