硬币谜题

来源:这里教程网 时间:2026-03-03 12:55:15 作者:

用1分、5分、10分、25分、50分硬币凑成一元,每种硬币的个数没有限制,总共有几种组合方法? 用connect by 方法 select    '1*'||c1.cnt      ||'+5*'||c5.cnt      ||'+10*'||c10.cnt      ||'+25*'||c25.cnt      ||'+50*'||c50.cnt as result  from ( select rownum-1 cnt  from dual connect by rownum-1<=100) c1, ( select rownum-1 cnt  from dual connect by rownum-1<=20) c5, ( select rownum-1 cnt  from dual connect by rownum-1<=10) c10, ( select rownum-1 cnt  from dual connect by rownum-1<=4) c25, ( select rownum-1 cnt  from dual connect by rownum-1<=2) c50 where  1*c1.cnt           +5*c5.cnt           +10*c10.cnt           +25*c25.cnt           +50*c50.cnt = 100; 用递归with 方法 with coin as ( select 1 cents from dual   union all select 5 cents from dual union all select 10 cents from dual union all select 25 cents from dual   union all select 50 cents from dual ), t(current_coin,total_val,c1,c5,c10,c25,c50) as( select 0,0,0,0,0,0,0 from dual union all select   c.cents, t.total_val+c.cents, c1+decode(c.cents,1,1,0), c5+decode(c.cents,5,1,0), c10+decode(c.cents,10,1,0), c25+decode(c.cents,25,1,0), c50+decode(c.cents,50,1,0)   from  t,coin c where  t.total_val + c.cents <=100   and  t.current_coin<=c.cents ) select    '1*'||c1      ||'+5*'||c5      ||'+10*'||c10      ||'+25*'||c25      ||'+50*'||c50 as result  from t  where total_val=100; 

相关推荐