免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: py
打印 上一主题 下一主题

给大家发一个澳大利亚研究生课程作业题 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
31 [报告]
发表于 2011-03-26 01:50 |只看该作者
这是生物信息学算法导论,第一章的例子嘛!!!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
32 [报告]
发表于 2011-03-26 03:31 |只看该作者
本帖最后由 yinyuemi 于 2011-03-26 03:37 编辑

觉得很有意思,写了个awk的,大家帮忙测试下

awk -v money=120 -f awk.script
  1. BEGIN{
  2. output(money)
  3. }
  4. function output(b)
  5.         {
  6.         list[0]=100;
  7.         list[1]=50;
  8.         list[2]=20;
  9.         list[3]=20;
  10.         list[4]=20;
  11.         list[5]=5;
  12.         list[6]=5;
  13.         for(i=0;i<=6;i++)
  14.                 if(b<list[i])
  15.                 {}
  16.                 else if (b==list[i])
  17.                 {print b;break}
  18.                 else {
  19.                         print list[i]
  20.                         b=b-list[i]
  21.                         if (b<=0)
  22.                         {break}
  23.                         else
  24.                         {print a[i]}
  25.                 }
  26.         }
复制代码

论坛徽章:
0
33 [报告]
发表于 2011-03-26 10:55 |只看该作者
没有,老师从没说过一定要用递归,只是,没有用递归的人,在测试过老师给出的那几个例子的时候都多少出 ...
py 发表于 2011-03-25 21:18



   

我认为思路最重要。  思路决定 写法。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
34 [报告]
发表于 2011-03-28 06:57 |只看该作者
回复 31# chenhao392

恩,我估计这题也不会是那老师自己创造出来的。货币找钱问题应该是比较经典的问题了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
35 [报告]
发表于 2011-03-28 06:58 |只看该作者
觉得很有意思,写了个awk的,大家帮忙测试下

awk -v money=120 -f awk.script
yinyuemi 发表于 2011-03-26 03:31


这个不对。当list[6]=4,找赎为160的时候,找出的钱是错误的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
36 [报告]
发表于 2011-03-28 06:58 |只看该作者
我认为思路最重要。  思路决定 写法。
alabos 发表于 2011-03-26 10:55


思路肯定是最重要的,我当时只想到了多叉树遍历。

把找赎当作根节点,每次需要找钱都先找出最大面值的货币,生成下一个节点,如果出现无法找出的情况就退回一个节点继续寻找。如果有多种货币组合都能找出钱,那最优的组合肯定会先出现。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
37 [报告]
发表于 2011-03-28 07:06 |只看该作者
回复  py


    用递归写起来很短啊要是Perl能像C一样支持宏替换把and 换成 箭头之类的符号看起来就舒服 ...
ttcn_cu 发表于 2011-03-25 20:24


这个也是不对的。
例如:
  1. my @cc=(
  2.         [50=>1],
  3.         [20=>3],
  4.         [5=>1]
  5. );
  6. my $input=60;
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
38 [报告]
发表于 2011-03-28 07:47 |只看该作者
回复 35# py

这样呢?只要list数组包含足够的零钱数
  1. BEGIN{
  2. output(money)
  3. }
  4. function output(b)
  5.         {
  6.         list[0]=100;
  7.         list[1]=50;
  8.         list[2]=20;
  9.         list[3]=20;
  10.         list[4]=20;
  11.         list[5]=5;
  12.         list[6]=5;
  13.         list[7]=5;
  14.         list[8]=4;
  15.         for(i=0;i<=8;i++)
  16.                 if(b<list[i])
  17.                 {}
  18.                 else if (b==list[i])
  19.                 {print b;break}
  20.                 else {
  21.                         print list[i]
  22.                         b=b-list[i]
  23.                         if (b<=0)
  24.                         {break}
  25.                         else
  26.                         {print a[i]}
  27.                 }
  28.         }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
39 [报告]
发表于 2011-03-28 07:59 |只看该作者
回复 38# yinyuemi
这个题目其实就是在讨论零钱不充足的情况下的找钱过程的。零钱足够多的时候基本不会出错
还有,这样的设计也不好吧。把零钱数量就写死了,list数组中元素应该是有限的,可以设计个二维数组来保存每个币种的数量

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
40 [报告]
发表于 2011-03-28 08:09 |只看该作者
回复 39# py


   看了问题还挺麻烦,看高手们的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP