Результат выражения Неиспользуемый жадный алгоритм

Я запустил эту программу и получил результат выражения ошибки неиспользованным. Возможно, я делаю что-то не так, но потратил день, пытаясь понять это безрезультатно. Мы очень ценим любую помощь, которую вы можете оказать.

#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);
Другие вопросы по тегам