现在假设有这种情况,我有100块钱,想换成不同面额的零钞,如下
1:50 1-10张
2:20 1-5张
3:10 1-10张要求
优先换50,比如输出结果应该是2张,因为允许换1到10张,所以20和10元就不用考虑
但是现在的问题是,假如面额的有130块钱的面值,那就是2张50,1张20,1张10元的
面额有不同的,要换算结果刚刚好,否则就输出0谁有更好的算法,我觉得穷举法应该不是最好的
大家来讨论下

解决方案 »

  1.   


            Dim Amount As Integer
            Dim RMB50_Counter, RMB20_Counter, RMB10_Counter As Integer
            Dim CurrentRMB As Integer        Amount = -1
            Response.Write("总额: " & Amount & " RMB<br>")        RMB50_Counter = 0
            RMB20_Counter = 0
            RMB10_Counter = 0
            CurrentRMB = 50        Do While Amount > 0
                If Amount >= CurrentRMB Then
                    Amount = Amount - CurrentRMB
                    Select Case CurrentRMB
                        Case 50
                            RMB50_Counter = RMB50_Counter + 1
                        Case 20
                            RMB20_Counter = RMB20_Counter + 1
                        Case 10
                            RMB10_Counter = RMB10_Counter + 1
                    End Select
                Else
                    Select Case CurrentRMB
                        Case 50
                            CurrentRMB = 20
                        Case 20
                            CurrentRMB = 10
                        Case Else
                            Exit Do
                    End Select
                End If
            Loop        Response.Write("50 RMB x" & RMB50_Counter & "<br>")
            Response.Write("20 RMB x" & RMB20_Counter & "<br>")
            Response.Write("10 RMB x" & RMB10_Counter & "<br>")
            Response.Write("余款: " & Amount & " RMB<br>")
      

  2.   

    int a = 180;
    int b = a % 50;
     
      int RMB50_Count = a/50;
      b = b%20;
      int RMB20_Count = b/20;
      b = b%10;
      int RMB10_Count = b/10;
      

  3.   

    一个迭代+职责链即可
    伪代码
    while(n<10)
    {
    if(n>=50&&50张数-->0)
    {
      n-=50;  
    }
    if(n>=20&&20张数-->0)
    {
      n-=20
    }
    //剩下的不写了
    }
      

  4.   

                Console.WriteLine("请输入要换的人民币:");
                int RMB = Convert.ToInt32(Console.ReadLine());
                int count50 = RMB / 50;
                int left = RMB % 50;
                int count20=0;
                int count10=0;
                int left1=0;
                int left2=0;          
                if (left >= 20)
                {
                    count20 = left / 20;
                    left1 = left % 20;
                    if (left1 >=10)
                    {
                        count10 = left1 / 10;
                        left2 = left1 % 10;
                    }
                }
                else
                {
                    count10 = left / 10;
                    left2 = left % 10;
                }
                Console.WriteLine("{0}张50的,{1}张20的,{2}张10的",count50,count20,count10);
                Console.ReadLine();