版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华东师范大学计算机科学技术系上机实践报告课程名称: 算法设计与分析年级:05上机实践成绩:指导教师: 柳银萍姓名:张翡翡上机实践名称:贪心算法学号:上机实践日期:2007-4-10上机实践编号:NO.2组号:上机实践时间:10:00-11:30一、目的了解熟悉掌握贪心算法实质并学会灵活运用,从而解决生活中一些实际问题。二、内容与设计思想1. 超市的自动柜员机(POS)要找给顾客各种数值的现金,表面上看,这是一个很简单的任务,但交给机器办就不简单了。你作为一个计算机专家,要求写一个程序来对付这个“简单”的问题。 你的自动柜员机有以下的币种:100元,50元,20元,10元,5元,2元,1元。你可
2、以假设每种钱币的数量是无限的。现在有一笔交易,需要找个客户m元,请你设计一个算法,使得找给顾客的钱币张数最少。要求:输入:第一行仅有一个整数n(0n=10000),表示有几组测试数据。每组测试数据仅有一行,每行只有一个整数m(0m),表示需要找的钱币数。(提示:对于大量的输出,请使用scanf,不要使用cin)输出:每组测试数据输出一行,每行有7个整数(两两之间有一个空格,结尾不能有空格),表示100元,50元,20元,10元,5元,2元,1元所需要的张数。1.1其思路是: 1) 定义相关变量;2) 接收相关数据,如测试数据组数n和要找的钱币数;3) 依次考虑100,50,20,10,5,2,
3、1的需要找的钱币张数,用最简单的加减乘除;4) 输出其值。1.2具体算法是: while(n-)m 输入a=m/100b=(m-100*a)/50c=(m-100a-50b)/20d=(m-100a-50b-20c)/10e=(m-100a-50b-20c-10d)/5f=(m-100a-50b-20c-10d-5e)/2g=m-100a-50b-20c-10d-5e-2f end while2. 若在0-1背包问题中各物品是依重量递增排列时,其价值恰好依递减序排列。对这个特殊的0-1背包问题,请设计一个有效算法找出最优解,并证明算法的正确性。要求:输入:输入只有四行,第一行有一个正数n(n
4、aj then k=j t=ai ai=ak ak=t ki for i0 to n for ji+1 to n if bkbj then k=j t=bi bi=bk bk=t for i0 to n max+=ai if max=w then sum+=bi return(0) 2.3算法的正确性证明:3一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。对于给定的n(n = 5000)和k(k = 1000)个加油站位置,编程计算最少加油次数。要求:输入:第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k
5、个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。输出:输出编程计算出的最少加油次数。如果无法到达目的地,则输出”NoSolution”。3.1其思路是:1) 定义相关变量及赋初值;2) 接收相关数据如加满油能行驶的距离,加油站个数和各加油站之间的距离;3) 考虑特殊情况:(1)如果起点到第一个加油站距离大于加满油时能行驶距离,则输出 “No Solution!”(2)如果七次加满油和起始站加满油之和能行驶距离小于起点到终点距离,则输出“No Solution” 4)for循环处理
6、各个站情况,如果剩余的油能行驶的距离大于到下一个站的距离,则不用再加油,如果剩余的油能行驶的距离小于到下一个站的距离,则加满油,如果加满油还是小于则输出“No Solution”,否则使计数m加一;5)最后输出m的值。3.2具体算法是: n输入 k输入 for i0 to k ai输入 sum+=ai if na0 then printf(No Solution!) else if n*(k+1)ai then left-=ai else t=n+left if tai then printf(No Solution!) else left=t-aim+=1 printf(m) return(
7、0)三、使用环境 Microsoft visual C+ 6.0 四、调试过程1. 有时候太大意,第一次调试时居然忘了打“*”符号,导致出现一大堆错误,我用的是最笨的办法来算钱币数,其实知道还有更优的方法去解决,之后还可以再研究研究,还出现一个问题就是粗心,“/”号打成“%”号导致结果错误甚至出现一堆乱码类东西。2. 做第二个程序基本没什么大问题,只是刚开始的时候排序函数没有单独写出来导致测试不正确,还有一开始没有在main()函数中定义调用的两个排序函数,最粗心的是将两个函数相反了一下,即把重量按升序排,价值按减序排导致结果很离谱。还有一个问题是最后一个for语句判断重量有没有超过背包总重量
8、时只是加出来总重量,即在bi的地方写成了ai,不过好在都是小错误。3. 第三个程序很顺利,只是在审题的时候考虑地太过复杂,考虑了比如现在第一个站它能开到第二个站,但是第二个站到第三个站即使加满油也不能开到的时候,我再考虑是不是该在第一个站加上油这样就能够从第二站到第三站,问题就变得复杂多了。调试过程只有一个地方出现问题就是考虑了剩余油能行驶距离如果小于接下来要行驶的距离,而忘了处理如果剩余油大于接下来能行驶距离情况下的left的值的改变。经过一步一步调试而处理好。五、总结 基础虽然简单但有时候还是要掌握牢固才好,粗心有时候会耽误很多不必要的时间要尽量克服,在写程序的时候认真才行。 有时候还是不
9、能偷懒,要尽量想想其他更优的方法,比如第一个程序我用的就是最笨最原始的方法,很显然复杂度可能就大了。 基础不扎实,在调用函数的时候在开头没有定义,不过经同学指点就可以改,应该学会更深一层思考以及用多种不同的方法实现,比如排序方法有很多种,可以借此机会多思考采用各种排序方法,从而巩固了以前的知识。 考虑问题要全面,虽然有时候会将问题复杂化但是至少思考过程能学到很多东西,这样会使逻辑越来越严谨。六、附录1. 找零钱问题的程序: (此处放程序)#includeint main()int a,b,c,d,e,f,g,n,m;scanf(%d,&n);while(n-)scanf(%d,&m);a=m/
10、100;b=(m-100*a)/50;c=(m-100*a-50*b)/20;d=(m-100*a-50*b-20*c)/10;e=(m-100*a-50*b-20*c-10*d)/5;f=(m-100*a-50*b-20*c-10*d-5*e)/2;g=m-100*a-50*b-20*c-10*d-5*e-2*f;printf(%d %d %d %d %d %d %dn,a,b,c,d,e,f,g);return(0);运行结果:2. 0-1背包问题的程序:(此处放程序)#includeint main()void sort1(int a10000,int n);void sort2(int
11、 b10000,int n);int a10000,b10000;int w,i,n;int max=0;int sum=0;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);for(i=0;in;i+)scanf(%d,&bi);scanf(%d,&w);sort1(a,n);sort2(b,n);for(i=0;in;i+)max+=ai;if(max=w)sum+=bi;printf(%dn,sum);return(0);void sort1(int a10000,int n)int i,j,k;int t;for(i=0;in;i+)k=i;for(j=
12、i+1;jaj)k=j;t=ai;ai=ak;ak=t;void sort2(int b10000,int n)int i,j,k;int t;for(i=0;in;i+)k=i;for(j=i+1;jn;j+)if(bkbj)k=j;t=bi;bi=bk;bk=t;运行结果: 3汽车加油问题的程序:(此处放程序)#includeint main()int n,k,i,left;int a1025;int sum=0;int m=0;int t=0;scanf(%d,&n);scanf(%d,&k);for(i=0;i=k;i+)scanf(%d,&ai);sum+=ai;if(na0)printf(No Solution!);el
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025注册测绘师测绘项目管理真题及答案
- 2026年学校关工委工作总结
- 燃气阀门专业知识培训课件
- 保险合规培训课件开场白
- 煤采制培训课件
- 医疗器械注册申报法规要求及资料准备
- 环保执法培训
- 铁矿石加工项目实施方案
- 《FZT 13040-2016芳砜纶色织布》专题研究报告
- 《GAT 2000.252-2019公安信息代码 第252部分:图像文件格式代码》专题研究报告
- 通信设备用电安全培训课件
- 方太企业培训课件
- 水上平台施工安全培训课件
- 中秋福利采购项目方案投标文件(技术方案)
- 固态电池技术在新能源汽车领域的产业化挑战与对策研究
- 手术部(室)医院感染控制标准WST855-2025解读课件
- 二氧化硅气凝胶的制备技术
- 湖南省岳阳市平江县2024-2025学年高二上学期期末考试语文试题(解析版)
- 2024-2025学年湖北省武汉市江汉区七年级(下)期末数学试卷
- 常规体检指标讲解
- 新人教版高中数学必修第二册-第八章 立体几何初步 章末复习【课件】
评论
0/150
提交评论