确定是否可以使用指定的数字和时间来建立数字

时间:2019-02-10 02:26:57

标签: c# asp.net arrays .net vb.net

我有2个数组,其中一种是要使用的数字类型,第二个数组是可以使用该数字的次数。我有一个字母来确定将使用哪种方法,我需要弄清楚可以使用数组中的某个数字来确定字母+数字的次数。“数字”是我必须使用所有可用的数字我可以使用的数字。如果无法拨打该号码,我只想说无法拨打号码或其他任何事情,而是允许程序继续进行。 这就是我所拥有的

int[] picksToUse = { 100, 50, 20, 10, 5, 1 };
int[] timesToUse = { 10, 10, 10, 10, 10, 10 };
string choice = Console.ReadLine();
string input = "";
if(choice.Length > 2)
{                    
     input = choice.Substring(choice.IndexOf("$") + 1);
}
if(...){
}
else if (choice.Equals("D")) 
{
     int amt = Convert.ToInt32(input);
 // code here to determine if number can be made with above choices
    Dispense(amt, timesToUse);
}

3 个答案:

答案 0 :(得分:0)

假设picksToUse和timesToUse与您声明的完全相同,这是一种方法来知道您是否有足够的库存来“支付”。这是一个布尔函数,它使用递归。您将以所需的数量作为参数来调用它,并且如果您有足够的一切,它会告诉您。

Private Function HasCashInStock(amount As Integer, Optional index As Integer = 0) As Boolean
    Dim billsNeeded As Integer = amount \ picksToUse(index)

    If billsNeeded > timesToUse(index) Then
        Return False
    End If

    amount -= picksToUse(index) * billsNeeded

    If amount = 0 Then
        Return True
    End If

    Return HasCashInStock(amount, index + 1)
End Function

\是一个整数除法运算符(至少在VB.NET中-我毫不客气地让您翻译此代码)。如果您不熟悉整数除法运算符,那么将其与整数配合使用时,它会摆脱浮点数。

3 / 2对整数无效,因为它将产生1.5。

3 \ 2对整数有效,并且将产生1。

仅此而已。哦,是的,还有递归。我喜欢递归,但是其他人会告诉您尽量避免递归。我该说些什么,我认为一个不错的递归函数很优雅。

您还可以再次完全复制此函数,对其进行修改,并在确定有足够的钱可以支付时使用它从您的timesToUse()数组中减去。

If HasCashInStock(HereIsTheAmountAsInteger) Then
    GivesTheMoney(HereIsTheAmountAsInteger)
End If

具有两个功能不是最精简的代码,但可读性更好。玩得开心!

答案 1 :(得分:0)

这就是我用来完成项目的条件。

 public static bool Validate(int amount, int[] total, int[] needed)
    {
        int[] billCount = total;
        int[] cash = { 100, 50, 20, 10, 5, 1 };
        int total = amount;
        bool isValid = true;
        for (int i = 0; i < total.Length; i++)
        {
            if(total >= cash[i])
            {
                billCount[i] = billCount[i] - needed[i];
            }
            if(billCount[i] < 0)
            {
                isValid = false;
                break;
            }
        }
        return isValid;
    }

答案 2 :(得分:0)

我有一些工作代码。我上课了。我记得当我看不到什么是好的班级时。现在,我不能不上课就刷牙。 :-)

我强迫自己做这些问题,以获得一些C#的经验。现在,我对C#有3件事。

    class ATM
    {
        public int Denomination { get; set; }
        public int Inventory { get; set; }
        public ATM(int denom, int inven)
        {
            Denomination = denom;
            Inventory = inven;
        }
    }
    List<int> Bills = new List<int>();
    List<ATM> ATMs = new List<ATM>();
    private void OP2()
    {
        int[] picksToUse = { 100, 50, 20, 10, 5, 1 };
        foreach (int d in picksToUse )
        {
            ATM atm = new ATM(d, 10);
            ATMs.Add(atm);
        }
        //string sAmtRequested = Console.ReadLine();
        string sAmtRequested = textBox1.Text;
        if (int.TryParse(sAmtRequested, out int AmtRequested))
        {
            int RunningBalance = AmtRequested;
            do
            {
                ATM BillReturn = GetBill(RunningBalance);
                if (BillReturn is null)
                {
                    MessageBox.Show("Cannot complete transaction");
                    return;
                }
                RunningBalance -= BillReturn.Denomination;
            } while (RunningBalance > 0);
        }
        else
        {
            MessageBox.Show("Non-numeric request.");
            return;
        }
        foreach (int bill in Bills)
            Debug.Print(bill.ToString());
        Debug.Print("Remaining Inventory");
        foreach (ATM atm in ATMs)
            Debug.Print($"For Denomination {atm.Denomination} there are {atm.Inventory} bills remaining");
    }
    private ATM GetBill(int RequestBalance)
    {
        var FilteredATMs = from atm in ATMs
                           where atm.Inventory > 0
                           orderby atm.Denomination descending
                           select atm;

        foreach (ATM bill in FilteredATMs)
        {
            if (RequestBalance >= bill.Denomination )
            {
                bill.Inventory -= 1;
                Bills.Add(bill.Denomination);
                return bill;
            }
        }
        return null;
    }