Результат выражения Неиспользуемый жадный алгоритм
Я запустил эту программу и получил результат выражения ошибки неиспользованным. Возможно, я делаю что-то не так, но потратил день, пытаясь понять это безрезультатно. Мы очень ценим любую помощь, которую вы можете оказать.
#include <stdio.h>
#include <cs50.h>
int main()
{
int x, y = 0;
printf("Enter the amount of change ");
x = GetFloat() * 100;
while (x != 0)
{
if (x >= 25)
{
x - 25;
y = y + 1;
}
if (x >= 10 && x < 25)
{
x - 10;
} y = y + 1;
if (x >= 5 && x < 10)
{
x - 5;
} y = y + 1;
if (x >= 1 && x < 5)
{ x - 1;
y= y + 1;
}
}
printf("The number of coins neccessary is %d", y);
}
3 ответа
if (x >= 25)
{
x - 25; // This accomplishes nothing
y = y + 1;
}
if (x >= 10 && x < 25)
{
x - 10; // This accomplishes nothing
} y = y + 1;
if (x >= 5 && x < 10)
{
x - 5; // This accomplishes nothing
} y = y + 1;
if (x >= 1 && x < 5)
{
x - 1; // This accomplishes nothing
y= y + 1;
}
В каждой из этих строк вы вычитаете число из x
, но вы ничего не делаете с результатом. Если вы пытаетесь обновить x
с результатом, вы должны сделать так же, как вы делаете с y
, и положи x =
перед выражением.
Так что если вы хотите x
идти вниз 25
, вы должны написать:
x = x - 25;
Кроме того, вы можете написать сокращение:
x -= 25; // Note the equal sign
Все 4 утверждения x - 25, x- 10, x- 5, x - 1 окажутся бесполезными, если вы не назначите это значение для x; Потому что вы пытаетесь вычесть значение из x, но не назначаете новое значение для x.
Вот решение вашей проблемы:
#include <stdio.h>
#include <cs50.h>
int main()
{
int x, y = 0;
printf("Enter the amount of change ");
x = GetFloat() * 100;
while (x != 0)
{
if (x >= 25)
{
x = x - 25; //or x-=25;
y = y + 1;
}
if (x >= 10 && x < 25)
{
x = x - 10; //or x-=10;
y = y + 1;
}
if (x >= 5 && x < 10)
{
x = x - 5; //or x-=5;
y = y + 1;
}
if (x >= 1 && x < 5)
{
x = x - 1; //or x-=1; or x--; or --x; :)
y = y + 1;
}
}
printf("The number of coins neccessary is %d", y);
}
Я бы остался, чтобы убедиться в вашей структуре петли. Есть оператор деления, который может быть использован для хорошего эффекта:
int total = 0;
int ncoins;
int amount = GetFloat() * 100;
assert(amount >= 0);
ncoins = amount / 25;
total += ncoins;
amount -= ncoins * 25;
assert(amount < 25);
ncoins = amount / 10;
total += ncoins;
amount -= ncoins * 10;
assert(amount < 10);
ncoins = amount / 5;
total += ncoins;
amount -= ncoins * 5;
assert(amount < 5);
total += amount;
Это написано от руки; Вы могли бы также разработать цикл:
int values[] = { 25, 10, 5, 1 };
enum { N_VALUES = sizeof(values) / sizeof(values[0]) };
int total = 0;
int ncoins;
int amount = GetFloat() * 100;
assert(amount >= 0);
for (int i = 0; i < N_VALUES && amount > 0; i++)
{
ncoins = amount / values[i];
total += ncoins;
amount -= ncoins * values[i];
}
assert(amount == 0);