繁体   English   中英

为什么我在输入 700 时得到错误的更改,但 800 工作正常?

[英]why I'm getting the wrong change when entering 700 but for 800 works fine?

DispenseAlgorithm如您所见,我正在尝试创建一个程序,在减去特定金额后显示剩余的钞票,所以我的算法有什么问题

   public abstract class DispenseAlgorithm
        {
            public abstract Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ);
    }

public class CassetteData
{
    public int UID { get; set; }
    public int Nominal { get; set; }
    public int Count { get; set; }
    public CassetteData() { }
}

public class CalculateDispenser : DispenseAlgorithm
{
    public int Num { get; set; }
    public double Num1 { get; set; }
    public double Num2 { get; set; }
    public int Num3 { get; set; }
    public int Num4 { get; set; }
    public int Num5 { get; set; }
    public int Num6 { get; set; }


    public override Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ)
    {
        this.Num=summ;
        Random rnd1 = new Random();
        Console.WriteLine("IN THE BANK YOU HAVE");
        CassetteData[] myO = { new CassetteData { UID = 1, Nominal = 10 , Count = 100 },
                               new CassetteData { UID = 2, Nominal = 50, Count =  100},
                               new CassetteData { UID = 3, Nominal = 100 , Count = 100 },

        };


        foreach (CassetteData o in myO)
        {
            Console.WriteLine("{0} {1} Rubles {2} notes",o.UID , o.Nominal,o.Count);
        }       
        for(int i = 0; i < 3; i++)
        {
            Num1 += myO[i].Nominal*myO[i].Count;
            Num2 =  Num1/summ;
            Num6 = (int)Math.Round(Num2);
             
        }
        for (int i = 0; i < 3; i++)
        {
            Num3 = (myO[i].Nominal * myO[i].Count) / Num6;
            Num4 += Num3;
            Console.WriteLine(Num3);
        }
        Console.WriteLine("divition " + Num6);
        Console.WriteLine(Num4);
        Dictionary<int, int> d = new Dictionary<int, int> ();
        Console.WriteLine("Remaining");
        d.Add(1, Math.Abs((myO[0].Nominal * myO[0].Count) / (Num6)/myO[0].Nominal));
        d.Add(2, Math.Abs((myO[1].Nominal * myO[1].Count) / (Num6) / myO[1].Nominal));
        d.Add(3, Math.Abs((myO[2].Nominal * myO[2].Count) / (Num6) / myO[2].Nominal));
        foreach (KeyValuePair<int, int> kvp in d)
        {
            
            Console.WriteLine("{0}  {1} packs",
                              kvp.Key, kvp.Value);
            
        }
        Console.WriteLine("SUM Subtracted = " + Num4);
        return d;


    }

  
}

减去 800 后,我得到 5 5 5 包,这意味着 5 10+5 50+5*100 = 800 正确,但输入 700 时不同

因此,在调查您的代码后,似乎由于舍入而引入了偏移量,

我对您的代码进行了一些更改,现在它按预期工作,

请在更改后的代码下方找到

公共摘要 class DispenseAlgorithm
{
公共抽象 Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ);
}

public class CassetteData  
{  
    public int UID { get; set; }  
    public int Nominal { get; set; }  
    public int Count { get; set; }  
    public CassetteData() { }  
}  

public class CalculateDispenser : DispenseAlgorithm  
{  
    public int Num { get; set; }  
    public double Num1 { get; set; }  
    public double Num2 { get; set; }  
    public double Num3 { get; set; }  
    public double Num4 { get; set; }  
    public int Num5 { get; set; }  
    public double Num6 { get; set; }  


    public override Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ)  
    {  
        this.Num = summ;  
        Random rnd1 = new Random();  
        Console.WriteLine("IN THE BANK YOU HAVE");  
        CassetteData[] myO = { new CassetteData { UID = 1, Nominal = 10 , Count = 100 },  
                           new CassetteData { UID = 2, Nominal = 50, Count =  100},  
                           new CassetteData { UID = 3, Nominal = 100 , Count = 100 },  

    };  

        foreach (CassetteData o in myO)  
        {  
            Console.WriteLine("{0} {1} Rubles {2} notes", o.UID, o.Nominal, o.Count);  
        }  
        for (int i = 0; i < 3; i++)  
        {  
            Num1 += myO[i].Nominal * myO[i].Count;  
            Num2 = Num1 / summ;  
            Num6 = Num2; // (int)Math.Round(Num2);  
            Console.WriteLine("Num1 {0} Num2 {1} Num6 {2} ", Num1, Num2, Num6);  

        }  
        for (int i = 0; i < 3; i++)  
        {  
            Num3 = (myO[i].Nominal * myO[i].Count) / Num6;  
            Num4 += Num3;  
            Console.WriteLine(Num3);  

        }  
        Console.WriteLine("division " + (int)Math.Round(Num6));  
        Console.WriteLine(Num4);  
        Dictionary<int, int> d = new Dictionary<int, int>();  
        Console.WriteLine("Remaining");  
        d.Add(1, Math.Abs((myO[0].Nominal * myO[0].Count) / (int)Math.Round(Num6) / myO[0].Nominal));  
        d.Add(2, Math.Abs((myO[1].Nominal * myO[1].Count) / (int)Math.Round(Num6) / myO[1].Nominal));  
        d.Add(3, Math.Abs((myO[2].Nominal * myO[2].Count) / (int)Math.Round(Num6) / myO[2].Nominal));  
        foreach (KeyValuePair<int, int> kvp in d)  
        {  

            Console.WriteLine("{0}  {1} packs", kvp.Key, kvp.Value);  

        }  
        Console.WriteLine("SUM Subtracted = " + Num4);  
        return d;  


    }  


}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM