计算错误。有任何想法吗?

时间:2016-03-30 15:53:31

标签: c computation

我在使用其中一个示例输入值时出现问题,除了最后一次输入外,其他所有内容都正常工作。

问题是找到2美元,5美元和10美元钞票的不同组合可以弥补价值,这里是样本输入和输出数字。

同样在这个问题中,(2 + 5)和(5 + 2)被视为独特的组合。

1 - 0
2 - 1
7 - 2
50 - 52524

我得到了其他一切的正确答案,但502的52271,似乎无法找出原因。这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

long long permutate(long long bill);
long long calculatePossibleOrders(long long A, long long B, long long C);
long long factor(long long x);

int main()
{
    long long num_cases, i;
    /* code for grabbing c - number of cases to solve */
    scanf("%I64d", &num_cases);

    /* for loop for each case */
    for(i = 0; i < num_cases; i++)
    {
        long long bill = 0;
        scanf("%I64d", &bill);
        printf("%I64d\n", permutate(bill));
    }
} 

long long permutate(long long bill)
{
    long long originalbill = bill;
    long long CurrentBill = originalbill; 
    long long numberofOptions = 0;
    long long A, B, C;


    if(bill == 1 || bill == 3)
    {
        return 0;
    }

    for(A = 0; A <= originalbill; A+=10)
    {
        B = 0, C = 0;
        if((CurrentBill - A) == 0) 
        {
            numberofOptions += calculatePossibleOrders(A, B, C); 
            break;
        }
        for(B = 0; (A + B) <= CurrentBill; B+=5)
        {
            C = 0;
            if((CurrentBill - (A + B)) == 0) 
            {
                numberofOptions += calculatePossibleOrders(A, B, C); 
                break;
            }
            for(C = 0; (A+B+C) <= CurrentBill; C+=2)
            {
                if((CurrentBill - (A + B + C)) == 0) 
                {   
                    numberofOptions += calculatePossibleOrders(A, B, C); 
                    break;
                }
            }
        }
    }

    return(numberofOptions);
}

long long calculatePossibleOrders(long long A, long long B, long long C)
{
    long long combos = 0;
    long long x = 0;

    if(A > 0)
    {
        A /= 10;
    }
    if(B > 0)
    {
        B /= 5;
    }
    if(C > 0)
    {
        C /= 2;
    }


    x = A+B+C;
    combos = factor(x)/(factor(A)*factor(B)*factor(C));

    return(combos);
}

long long factor(long long x)
{
    long long i;
    long long value = 1;
    for(i = 1; i <= x; i++)
    {
        value = value*i;
    }
    return(value);
}

0 个答案:

没有答案