人民币换算算法的问题,Nokia面试题

JFlex1981 2009-12-19 02:58:08
现在假设有这种情况,我有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

谁有更好的算法,我觉得穷举法应该不是最好的
大家来讨论下
...全文
479 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
令狐苦瓜 2011-05-20
  • 打赏
  • 举报
回复
有趣的问题,解法多多
zhangyong361055720 2011-05-20
  • 打赏
  • 举报
回复
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();
fk1984316 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alifriend 的回复:]
贪心算法即可
[/Quote]
up
wanghui0380 2011-05-20
  • 打赏
  • 举报
回复
一个迭代+职责链即可
伪代码
while(n<10)
{
if(n>=50&&50张数-->0)
{
n-=50;
}
if(n>=20&&20张数-->0)
{
n-=20
}
//剩下的不写了
}
zhizouxiao 2011-05-20
  • 打赏
  • 举报
回复
如果想学算法,类似你们说的贪心算法从哪儿可以学呢,数据结构里貌似没有……
  • 打赏
  • 举报
回复
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;
hitlcyu19 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alifriend 的回复:]

贪心算法即可
[/Quote]
没错
J_HongHai 2011-05-20
  • 打赏
  • 举报
回复
用总额与面额求幂,再整除!
  • 打赏
  • 举报
回复
除50取余 为0就是商 不为零余数除20取余 。。还不为零就除10取余 钱的数目就是各自的商、
wolf1947 2011-05-20
  • 打赏
  • 举报
回复
学习!
myhope88 2011-05-20
  • 打赏
  • 举报
回复
除了穷举法,好像也没啥好方法,看 有没有对穷举法再优化下
gengchenhui 2011-05-20
  • 打赏
  • 举报
回复
你是要算出什么?算出所有组成情况还是就是贪心算法需要的那个结果?
aqinier2 2011-05-19
  • 打赏
  • 举报
回复
我是菜鸟,路过围观。。。。
z050301402 2011-05-19
  • 打赏
  • 举报
回复
学习学习
net5354 2011-05-19
  • 打赏
  • 举报
回复
本人蠢笨,不知所云!就是无聊
fangof 2011-05-19
  • 打赏
  • 举报
回复
确实是贪心算法可以解决的,学习了!
chaofd 2009-12-19
  • 打赏
  • 举报
回复
MK
JFlex1981 2009-12-19
  • 打赏
  • 举报
回复
顶一下
V-Far 2009-12-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alifriend 的回复:]
贪心算法即可
[/Quote]嗯.从高位算起.总数减去最高的50.如果大于0则50的数量加1,继续减50,如果还大于0.继续加小于0则跳到20那里去减...
iabswfg858 2009-12-19
  • 打赏
  • 举报
回复
学习.
加载更多回复(8)

62,264

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧