
Huryer
(usa XUbuntu)
Enviado em 06/10/2016 - 14:19h
Ei galera, este é meu primeiro tópico aqui, então paciência!
Estava navegando há algumas horas e achei um problema de programação que me deu vontade de resolver... Em resumo, o problema pede que, dado um número "em ponto flutuante" digitado pelo usuário, sendo que este número representa um valor monetário, diga qual o valor mínimo de cédulas e moedas para somar aquela quantia. Os valores das cédulas foram dados (100, 50, 20, 10, 5 e 2) e das moedas também (1, 0.50, 0.25, 0.10, 0.05 e 0.01).
Até aí tudo bem, afinal pra mim a lógica do problema é fácil de ser interpretada e escrita em C. Só que, apesar de ler e re-ler meu código várias vezes, não consigo encontrar o erro. Em poucas palavras ele sempre deixa "uma moeda de 1 centavo" a menos na contagem. Exemplo: digitando o valor "0.19" ele me responde que são: 1 moeda de 0.10, 1 de 0.05 e ~3~ de 0.01, sendo que, na verdade seriam 4 moedas de 0.01. Abaixo o meu código:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float VALORES[] = {100.00, 50.00, 20.00, 10.00, 5.00, 2.00, 1.00, 0.50, 0.25, 0.10, 0.05, 0.01};
float N;
int i = 0, cont = 0;
scanf("%f", &N);
while(i < 12)
{
while(N >= VALORES[i])
{
cont++;
N = N - VALORES[i];
}
if(i < 6)
{
if(i == 0)
printf("NOTAS:\n");
printf("%i nota(s) de R$ %.2f\n", cont, VALORES[i]);
}
if(i >= 6)
{
if(i == 6)
printf("MOEDAS:\n");
printf("%i moedas(s) de R$ %.2f\n", cont, VALORES[i]);
}
cont = 0;
i++;
}
return 0;
}
Alguém pode me ajudar a resolver isso?
Desde já agradeço a ajuda!!!