Это простая проблема расчета минимального количества монет, необходимых для внесения изменения, с учетом значения N. Разделение 0.04/0.01 дает 3, почему?Отдел дает неправильный ответ
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int MinQtdCoins(float N, float coins[], int qtdCoins)
{
int i, qtdMinCoins = 0;
int numCoins=0;
for(i=0; i<qtdCoins; i++)
{
if(N > coins[i] || fabs(N - coins[i]) < 0.0000000001) // N >= coins[i]
{
numCoins = (int)(N/coins[i]);
printf("Number of Coins: %f divided by %f = %d, ",N,coins[i],numCoins);
qtdMinCoins += numCoins;
N = N - numCoins*coins[i];
printf("remains: %f\n",N);
}
}
return qtdMinCoins;
}
int main()
{
int qtdCoins = 5;
float coins[] = {0.50, 0.25, 0.10, 0.05, 0.01};
float N=9.79;
printf("\n\n%d\n",MinQtdCoins(N, coins, qtdCoins));
return 0;
}
В догадке я бы сказал, что вы выполняете деление с плавающей запятой, которая дает ответ близко к, но меньше 4, и усекает его до целого числа, чтобы получить 3. Попробуйте умножить вашу цель и значения ваших монет на 100, чтобы весь расчет можно было сделать целыми числами – 2014-09-29 02:35:54
Связанный, если не дублировать: http://stackoverflow.com/questions/24665459/best-practices-for-floating-point-arithmetics –