现在假设有这种情况,我有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: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谁有更好的算法,我觉得穷举法应该不是最好的
大家来讨论下
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>")
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;
伪代码
while(n<10)
{
if(n>=50&&50张数-->0)
{
n-=50;
}
if(n>=20&&20张数-->0)
{
n-=20
}
//剩下的不写了
}
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();