pesquisa

URI PROBLEMA 1483 - Jogo do Bicho SOLUCAO EM C

URI Online Judge | 1483

Jogo do Bicho

Por Ricardo Anido  Brasil
Timelimit: 1
Em um país muito distante, as pessoas são viciadas em um jogo de apostas bastante simples. O jogo é baseado em números e é chamado jogo do bicho. O nome do jogo deriva do fato que os números são divididos em 25 grupos, dependendo do valor dos dois últimos dígitos (dezenas e unidades), e cada grupo recebe o nome de um animal. Cada grupo é associado a um animal da seguinte forma: o primeiro grupo (burro) consiste nos números 01, 02, 03 e 04; o segundo grupo (águia) é composto dos números 05, 06, 07 e 08; e assim em diante, até o ultimo grupo contendo os números 97, 98, 99 e 00. As regras do jogo são simples. No momento da aposta, o jogador decide o valor da aposta V e um número N (0 ≤ N ≤ 1000000). Todos os dias, na praça principal da cidade, um número M é sorteado (0 ≤ M ≤ 1000000). O prêmio de cada apostador é calculado da seguinte forma:
  • Se M e N têm os mesmos quatro últimos dígitos (milhar, centena, dezena e unidade), o apostador recebe V × 3000 (por exemplo, N = 99301 e M = 19301);
  • Se M e N têm os mesmos três últimos dígitos (centena, dezena e unidade), o apostador recebe V × 500 (por exemplo, N = 38944 e M = 83944);
  • Se M e N têm os mesmos dois últimos dígitos (dezena e unidades), o apostador recebe V × 50 (por exemplo, N = 111 e M = 552211);
  • Se M e N têm os dois últimos dígitos no mesmo grupo, correspondendo ao mesmo animal, o apostador recebe V × 16 (por exemplo, N = 82197 and M = 337600);
  • Se nenhum dos casos acima ocorrer, o apostador não recebe nada.
  • Obviamente, o prêmio dado a cada apostador é o máximo possível de acordo com as regras acima. No entanto, não é possível acumular prêmios, de forma que apenas um dos critérios acima deve ser aplicado no cálculo do prêmio. Se um número N ou M com menos de quatro dígitos for apostado ou sorteado, assuma que dígitos 0 devem ser adicionados na frente do numero para que se torne de quatro dígitos; por exemplo, 17 corresponde a 0017.
  • Dado o valor apostado, o número escolhido pelo apostador, e o número sorteado, seu programa deve calcular qual o prêmio que o apostador deve receber.

Entrada

A entrada contém vários casos de teste. Cada caso consiste em apenas uma linha, contendo um número real V e dois inteiros N e M, representando respectivamente o valor da aposta com duas casas decimais (0.01 ≤ V ≤ 1000.00), o número escolhido para a aposta (0 ≤ N ≤ 1000000) e o número sorteado (0 ≤ M ≤ 1000000). O final da entrada é indicado por uma linha contendo V = M = N = 0.

Saída

Para cada um dos casos de teste seu programa deve imprimir uma linha contendo um número real, com duas casas decimais, representando o valor do prêmio correspondente à aposta dada.



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

int main ()
{
    int c, h = 1, Matriz[24], d_ulN, d_ulM, t_ulN, t_ulM, q_ulN, q_ulM;
    unsigned long long N, M;
    double V, premio;

    scanf("%lf", &V);
    scanf("%llu", &N);
    scanf("%llu", &M);

 // atribui valores a matriz (inicio dos intervalos)//
    for (c = 0; c <= 24; c++)
        {
            Matriz[c] = h;
            h = h + 4;
        }
    ////////////////////////////////////////////////////////////

    //DESCOBRINDO OS ULTIMOS NUMEROS//

    do
    {
        premio = 0;
        d_ulN = N % 100;
        d_ulM = M % 100;

        t_ulN = N % 1000;
        t_ulM = M % 1000;

        q_ulN = N % 10000;
        q_ulM = M % 10000;

        if (q_ulN == q_ulM) // 4 ultimos
            premio = V * 3000;
        else
            if (t_ulN == t_ulM)  //3 ultimos
                premio = V * 500;
            else
                if (d_ulN == d_ulM) // 2 ultimos
                    premio = V * 50;
                else     // DESCOBRINDO OS DE MESMO GRUPO
                    if ((d_ulN == 00) && (d_ulM == 00))
                        premio = V *16;

                    else
                    {
                        for (c = 0; c <= 24; c++)
                        {
                            if ((d_ulN >= Matriz[c]) && (d_ulN < Matriz[c+1]))
                            //maiores ou iguais ao corrente E menores que
                            //o proximo grupo=> mesmo grupo
                            {
                                if (d_ulM >= Matriz[c] && (d_ulM < Matriz[c+1]))
                                    premio = V *16;
                                else
                                    if (d_ulN >= 97 && d_ulM >= 97 )
                                        premio = V *16;
                            }
                        }
                    }

        printf("%.2lf\n", premio);

        scanf("%lf", &V);
        scanf("%llu", &N);
        scanf("%llu", &M);

    } while ((V!=0) || (N!=0) || (M!=0));

    return 0;
}

Postar um comentário

0 Comentários