我在使用其中一个示例输入值时出现问题,除了最后一次输入外,其他所有内容都正常工作。
问题是找到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);
}