TheBigBearNow Ответов: 1

Представление суммы в долларах и отслеживание


Привет всем, я работаю над консольным приложением C#, где я должен представлять деньги и отображать, сколько купюр было использовано для каждой суммы. Единственная проблема, над которой я сейчас работаю, - это записать номер каждой использованной купюры и вычесть его из текущего числа. Я думал о том, чтобы сделать денежный класс для 100s 50s 20s 10s 5s и 1s, но когда у меня есть он в моем Main (), я не могу иметь каждую ценностную купюру с указанным количеством сколько. Имея указанное значение, я бы имел следующее : Но каждое из них не имеет значения суммы
int hund = 10;
            int fif = 10;
            int twen = 10;
            int ten = 10;
            int five = 10;
            int one = 10;

Или если мне нужна сумма значения я думал об этом но я не могу определить фиксированное число для использования
public class Money
    {
        public int HundBill { get; set; }
        public int FiftBill { get; set; }
        public int TwentBill { get; set; }
        public int TenBill { get; set; }
        public int FiveBill { get; set; }
        public int OneBill { get; set; }

        public Money()
        {
            HundredDollarBill = cash / 100;
            cash %= 100;
            FiftyDollarBill = cash / 50;
            cash %= 50;
            TwentyDollarBill = cash / 20;
            cash %= 20;
            TenDollarBill = cash / 10;
            cash %= 10;
            FiftyDollarBill = cash / 5;
            cash %= 5;
            OneDollarBill = cash / 1;
            cash %= 1;      }

Я получаю ввод пользователей, и я получаю номер, и я хочу за вычетом количества счетов, которые были использованы, чтобы сделать эту сумму и отслеживать ее.

Что я уже пробовал:

Отслеживание того, что было использовано в переменной, чтобы я мог вычесть использованные долларовые купюры, а затем я хочу пополнить запасы, но это будет легко после того, как я выясню эту часть

enhzflep

При работе с деньгами стандартный подход заключается в использовании только целочисленной арифметики, чтобы избежать ошибок, вызванных недостатком точности при работе с числами с плавающей запятой.

Для этого нужно просто записать количество центов или любой другой самой маленькой денежной единицы. Вы всегда будете иметь только целые числа из них и избежите проблем точности..

Оттуда вы можете просто сохранить массив, который имеет один элемент для каждого элемента валюты. Вы просто увеличиваете правильный элемент каждый раз, когда встречается еще одна денежная единица, и вуаля! Вы знаете, сколько у вас есть и как вы это получили.

TheBigBearNow

Так что в основном нравится то, что у меня есть, зарабатывайте деньги, как я это делал, и как у меня это есть

HundredDollarBill = cash / 100;
            cash %= 100;

И я могу использовать массив или список, чтобы отслеживать деньги.hundbill => 10 ?
Могу ли я получить небольшой пример я думаю что понимаю что вы имеете в виду но если я вижу это то для 1 Билла я не знаю правильно ли я это понимаю

1 Ответов

Рейтинг:
2

Patrice T

Я думаю у тебя есть еще одна проблема

Цитата:
Единственная проблема, над которой я сейчас работаю, - это записать номер каждой использованной купюры и вычесть его из текущего числа.

Ваш код вычисляет наилучший возможный ответ, он просто не учитывает, что у вас должно быть достаточно банкнот, чтобы сделать эту сумму.
Ваш код
HundredDollarBill = cash / 100;  // compute number of notes needed
cash %= 100;  // and subtract from amount

То, что вам нужно сделать, это
HundredDollarBill = cash / 100;  // compute number of notes needed
HundredDollarBill = ...  // check number of notes available
cash -= HundredDollarBill * 100;  // subtract those notes from amount


TheBigBearNow

Итак, вот что я придумал, и он сделал все правильно, за исключением того, что я сделал значение 258, и это дало мне десятку с другими правильными значениями. Это просто дало мне дополнительные 10, но все остальное, что я пробовал, работало..

        public static int[] MakeChange(int amount)
        {
            int[] cashBills = { 100, 50, 20, 10, 5, 1 };
            int[] billCounts = { 0, 0, 0, 0, 0, 0 };

            int billrem = 0;    //bill=0
            int reminder = amount;  //remainder
            while(reminder > 0)
            {

                billCounts[billrem] = reminder / cashBills[billrem];

                reminder = amount % cashBills[billrem];
                billrem++;
            }
            return billCounts;
        }

Patrice T

Чтобы помочь понять, что происходит, отладчик является инструментом для использования.

TheBigBearNow

В конце концов я пошел в другом направлении

Мой остаток добавлял 10 к сумме после того, как она снизилась до 8 по какой-то странной причине. Поэтому я переключился на цикл for с количеством используемых банкнот и if to минус оставшаяся сумма. Теперь у меня все работает как надо. Итак, перейдем к следующим шагам отслеживания.
Спасибо

TheBigBearNow

Я получаю ввод пользователей, и я получаю номер, и я хочу за вычетом количества счетов, которые были использованы, чтобы сделать эту сумму и отслеживать ее.

Быстрый вопрос, чтобы установить пятно в массиве каждого значения, почему мое пятно не может назначить позицию?

       public static int[] Reset( int[] billsRefill)
        {
            //int[] cashRefill = { 10, 10, 10, 10, 10, 10 };
            foreach(int spot in billsRefill)
            {
                spot = 10;
            }
            return billsRefill;
        }

TheBigBearNow

Спасибо парашютист
Это помогло мне многое объяснить.

А теперь у меня новый вопрос.
У меня есть массив количества счетов, которые я должен использовать.
Я вычитаю счет каждый раз, когда использую его.
мои 100-е работают, но когда я иду к следующему счету, остаток неправильный, так что я не могу двигаться дальше, вот некоторые из вещей, которые я пробовал..

public static void countbills(int amount, int[] bills, int[] billsCount)
        {
            int remainder = amount;
            int billIterator = 1;
            for(int i = 0; i < billsCount.Length; i++)   // while(remainder > 0)
            {
                //if(remainder >= bills[billIterator])  //{  if(billsCount[])  }
                if (remainder >= bills[i])
                {
                    if (billsCount[i] != 0)
                    {
                        billsCount[i]--;
                        remainder -= bills[billIterator];//bills[i] * billsCount[billIterator];
                        billIterator++;
                        //= bills[i];//amount / bills[i];     //remainder -= counts[bill] * dollarSizes[bill]; //reminder = amount % cashBills[billrem];
                        //amount -= billsCount[i] * bills[i];
                        //billsCount[i]--;
                    }
                }
            }
        }

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Patrice T

Совет: используйте отладчик, чтобы увидеть, что делает ваш код.
вы не должны иметь "billIterator" в этом коде.