2017算法设计与应用作业

合集下载

算法课程设计资料

算法课程设计资料

吉林财经大学课程设计报告课程名称:算法课程设计设计题目:插棒游戏所在院系:管理科学与信息工程学院计算机科学与技术指导教师:职称:副教授提交时间: 2017年4月目录一、题目描述与设计要求 (1)1 题目描述与设计要求 (1)二、问题分析 (1)1 解空间 (1)2 解空间结构 (2)3 剪枝 (2)4 回溯法的基本思想 (2)5 回溯法的适用条件 (3)6 回溯法的空间树 (4)7 回溯法的基本步骤 (4)三、算法设计 (5)1 伪代码 (5)四、复杂性分析 (6)1 时间复杂度 (6)2 空间复杂度该 (6)五、样本测试、分析与总结 (6)1 样本测试 (6)2 分析 (7)2.1、数据类型 (7)2.2 主要函数思路 (7)2.3 回溯 (8)3 总结 (8)参考文献 (9)附录 (10)一、题目描述与设计要求1 题目描述与设计要求这个类似谜题的游戏在等边三角形的板上布置了 15 个孔。

在初始时候,如下图所示,除了一个孔,所有孔都插上了插棒。

一个插棒可以跳过它的直接邻居,移到一个空白的位置上。

这一跳会把被跳过的邻居从板上移走。

设计并实现一个回溯算法,求解该谜题的下列版本:a.已知空孔的位置,求出消去 13 个插棒的最短步骤,对剩下的插棒的最终位置不限。

b.已知空孔的位置,求出消去 13 个插棒的最短步骤,剩下的插棒最终要落在最初的空孔上。

图1二、问题分析1 解空间由于棋盘的对称性,棋盘在变化的过程中会形成多个同构的状态。

例如初始状态时,空孔只有一个,共有15种基本状态。

如图2 所示,任意状态与空孔位置在其它的与该空孔颜色相同的点处的状态是同构的,它们可以通过沿中位线翻转和旋转60o 互相转换。

也就是说,空孔所在位置的颜色相同的个状态是同构的。

如空孔位置在顶点处的三个状态,他们仅通过旋转60o的操作即可互相转换。

图2同构的状态要么都无解,要么有相同数量的解,且他们的解可以根据同构对应变化得到。

南阳理工算法设计与分析期末试题成教专升本

南阳理工算法设计与分析期末试题成教专升本

南阳理工学院2017级清考2课程:算法设计与分析(专升本)总时长:120分钟1. (单选题) 下面程序段的运行结果是()。

int n=0;while (n++<=2);printf(“%d”,n);(本题2.5分)A、 2B、 3C、 4D、有语法错误学生答案: A标准答案:C解析:得分: 02. (单选题) 若i为整型变量,则以下循环执行次数是()。

for(i=2;i= =0) printf(“%d”,i- -);(本题2.5分)A、无限次B、0次C、1次D、2次学生答案: B标准答案:B解析:得分: 2.53. (单选题) 对下述程序段描述正确的是()。

int k=0:while (k=1)k++;(本题2.5分)A、有语法错误,不能执行B、循环是无限循环C、循环体语句一次也不执行D、程序体语句执行一次学生答案: A标准答案:B解析:得分: 04. (单选题) 下面有关for循环的正确描述是()。

(本题2.5分)A、for循环只能用于循环次已经确定的情况B、for循环是先执行循环体语句,后判断表达式C、在for循环中,不能用break语句跳出循环体D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来学生答案: D标准答案:D解析:得分: 2.55. (单选题) C语言中while和do-while循环的主要区别是()。

(本题2.5分)A、do-while的循环至少无条件执行一次B、while的循环控制条件比do-while循环控制条件更严格C、do-while允许从外部到循环体内D、do-while的循环体不能是复合语句学生答案: A标准答案:A解析:得分: 2.56. (单选题) 下面程序段的描述,正确的是()。

x=-1; do{x=x*x;}while(!x);(本题2.5分)A、是死循环B、循环执行两次C、循环执行一次D、有语法错误学生答案: C标准答案:C解析:得分: 2.57. (单选题) 下面程序运行的结果是()。

《操作系统原理》3(2017)在线作业参考资料

《操作系统原理》3(2017)在线作业参考资料

《操作系统原理》3(2017)在线作业参考资料一、单选题(共30 道试题,共60 分。

)V1. 下面关于设备属性的论述中,正确的是()。

A. 字符设备的基本特征是可寻址到字节,即能指定输入的源地址或输出的目标地址B. 共享设备必须是可寻址的和可随机访问的设备C. 共享设备是指同一时间内允许多个进程同时访问的设备D. 在分配共享设备和独占设备时都可能引起进程死锁正确答案:B 满分:2 分2. 从静态角度看,进程由程序、数据和()三部分组成。

A. JCBB. DCBC. PCBD. PMT正确答案:C 满分:2 分3. 在操作系统中,进程是一个()概念,而程序是一个静态的概念。

A. 组合态B. 关联态C. 运行态D. 动态正确答案:D 满分:2 分4. 通常,文件的逻辑结构可以分为两大类:无结构的()和有结构的记录式文件。

A. 堆文件B. 流式文件D. 直接(Hash)文件正确答案:B 满分:2 分5. 在请求调页系统中有着多种置换算法:选择自某时刻开始以来,访问次数最少的页面予以淘汰的算法称为()。

A. FIFO算法B. OPT算法C. LRU算法D. LFU算法正确答案:D 满分:2 分6. 使用户所编制的程序与实际使用的物理设备无关是由()功能实现的。

A. 设备分配B. 缓冲管理C. 设备管理D. 设备独立性正确答案:D 满分:2 分7. 通道具有()能力。

A. 执行I/O指令集B. 执行CPU指令集C. 传输I/O命令D. 运行I/O进程正确答案:A 满分:2 分8. 在请求调页系统中有着多种置换算法:选择自上次访问以来所经历时间最长的页面予以淘汰的算法称为()。

A. FIFO算法C. LRU算法D. NRU算法正确答案:C 满分:2 分9. 下列第()项不是文件系统的功能?A. 文件系统实现对文件的按名存取B. 负责实现数据的逻辑结构到物理结构的转换C. 提高磁盘的读写速度D. 提供对文件的存取方法和对文件的操作正确答案:C 满分:2 分10. 实现CPU和外部设备并行工作的硬件支持是:()。

吉林大学2017第二学期大作业CADCAM (1)

吉林大学2017第二学期大作业CADCAM (1)

2016-2017学年第二学期期末考试《CAD/CAM》大作业一、简答题(每小题10分,共100分)1. CAD/CAM系统组成有哪些?(1)计算机(主机):是CAD/CAE/CAM的核心部分。

注塑模设计的全过程是一个信息转变的过程,同时生成大量的图形信息、分析计算结果信息等。

因此要求有一台高性能的计算机。

计算机主要由中央处理器(CPU)、内存储器(内存)和输入/输出(I/O)接口组成。

CPU由控制单元和算术逻辑单元组成,用于控制系统中所有部件的工作并进行数据的算术逻辑运算。

内存为计算机本身的一部分,并直接与CPU相连,主要用于存放系统软件、用户程序及数据。

而I/O接口是主机与外部设备连接的逻辑控制部件。

(2)外存储器(外存):又叫辅助存储器,主要用于存放数据和程序,存放内存存放不下的数据和程序。

外存主要有硬磁盘、软磁盘、磁带、光盘和光磁盘等几种形式。

(3)输入设备:它是将程序和数据输入计算机,并将信息送至内存或CPU。

常用的输入设备有键盘、鼠标、字符终端、图形终端等。

(4)输出设备:其作用是把主机经过程序运算和数据处理的信息输出到指定位置。

常用的输出设备有图形显示器、绘图机、打印机等。

(5)生产设备:当设计完成后,需要由生产设备将设计付诸实施,让图样变为实体,完成这个工作的生产设备主要有数控机床、机器人、自动测试装置、搬运机械等。

(6)网络:是用通信线路和通信设备将分散在不同地点并具有独立功能的各个硬件连接在一起,以实现一定程度的硬、软件资源共享,并实现与上位机或另外计算机网络进行通信。

计算机网络通常包括广域网和局域网两种。

2.什么是CAD技术?利用计算机及其图形设备帮助设计人员进行设计工作。

简称CAD。

在工程和产品设计中,计算机可以帮助设计人员担负计算、信息存储和制图等项工作。

3.CAD/CAM 系统软、硬件选择的总体原则。

在CAD/CAM系统选型中应把握趋势、区分差异、合理配置、兼顾发展。

浙江省杭州市萧山区2017年高考模拟命题比赛技术试卷13含答案

浙江省杭州市萧山区2017年高考模拟命题比赛技术试卷13含答案

2017年高考模拟试卷 信息技术卷命题双向细目表2017年高考模拟试卷信息技术卷总分:50分考试时间:45分钟一、选择题(本大题共12小题,每小题2分,共24分。

每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分)1.【原创】2016年,韩国围棋高手李世石挑战机器人“AlphaGo”以1:3失利。

今年四月份,在浙江乌镇将进行一场当今围棋第一人柯洁与“AlphaGo”的较量。

机器人“AlphaGo”挑战人类围棋高手,这主要体现了下列哪种技术( )A. 光电子技术B.人工智能技术C.多媒体通讯技术D.遥感技术难度0.85 区分度0.30 信度0.82参考答案:B命题意图与解析:本题考核信息技术发展及其应用。

机器人“AlphaGo”跟人对战,具有分析棋谱的能力,这属于人工智能范畴。

2.【根据高分直通车信息技术统一考试复习题改编】利用OCR光学字符识别软件可以快速地从图像中识别出字符,从而得到文本文件。

那么OCR软件能识别下列哪些文件( )①example.tif ②example.avi ③example.wav ④example.bmpA.②④B. ①③C. ②③D. ①④难度0.80 区分度0.38 信度0.83参考答案:D命题意图与解析:本题综合考核OCR的应用与文件类型的识记。

OCR软件识别的是图像文件,此题要求学生能对题中给出的四种文件类型能区分识别,找出图像文件。

3.【根据2016.4浙江省学考题改编】电子邮件从发送方传送到接收方的基本流程如图所示。

邮件从“发送方邮件服务器”传送到“接收方邮件服务器”(如图所示步骤④)的过程中使用的协议是( )A.SMTP B.POP3 C.HTTP D.HTML难度0.75 区分度0.35 信度0.78 参考答案:A命题意图与解析:本题考核电子邮件的协议。

简单邮件传输协议(SMTP)的作用是把电子邮件从发件人那里送到收件人那里,故此题选A。

本科专业认证《程序设计、算法与数据结构(一)》教学大纲

本科专业认证《程序设计、算法与数据结构(一)》教学大纲

《程序设计、算法与数据结构(一)》教学大纲课程编号:0812000217课程名称:程序设计、算法与数据结构(一)英文名称:Programming,Algorithm and Data Structure I学分:3 课程性质:必修总学时:48 其中,讲授48学时,实验0学时,上机0学时,实训0学时适用专业:网络工程建议开设学期: 1先修课程:无开课单位:计算机与通信工程学院一、课程简介《程序设计、算法与数据结构(一)》是计算机科学与技术、软件工程、网络工程、通信工程专业基础课程,是课程群的启蒙课,也是学生进入大学后的第一门程序设计类课程,其目的是以C语言程序设计为基础,使学生熟悉C程序设计的基本语法,通过大量的编程练习,引导学生进入程序设计的殿堂,培养学生基本的数据结构和算法分析能力,为后续课程的学习打下基础。

二、课程目标与毕业要求依据2017培养方案中的毕业要求,考虑本课程与专业毕业要求的支撑关系,制定本课程学习目标。

课程目标1:通过程序三种基本控制结构,函数等知识点的学习,要求学生掌握结构化程序设计的基本思想,深入领会自顶向下、逐步求精的设计方法,识别网络工程项目的设计与开发过程中功能模块划分的问题。

(支持毕业要求 2.1能运用数学、自然科学及网络工程的基本原理,识别和判断网络工程问题的关键环节。

)课程目标2:在程序设计C语言后阶段学习过程中,针对成绩管理信息系统大作业的要求,将同学分组了解系统功能与应用背景,对具体的开发任务进行分工联调并编程实现。

通过系统实现强化个体的角色意识和团队意识。

(支撑毕业要求9.1:能够理解多学科背景下的团队中每个角色的定位与责任,具有团队合作意识,能够胜任个体、团队成员的角色任务。

)课程目标3:通过学习标准的C语言程序设计语法,运用函数、线性表、字符串、链表等基本知识,通过学习算法的描述方法,使学生能将实际问题转换成计算机描述的算法问题,培养学生运用程序算法的描述方法进行交流的能力。

普通高中信息技术课程标准(2017年版)解读

普通高中信息技术课程标准(2017年版)解读

精心整理普通高中信息技术课程标准解读一、课程性质与基本理念(一)课程性质旧课程标准突出综合实践性,新课程标准突出信息技术是一门基础课程。

新课程标准强调构建具有时代特征的学习内容,兼重理论学习和实践应用,将知识建构、技能培养与思维发展融入到运用数字化工具解决问题和完成任务的过程中,让学生参与到信息技术支持的沟通、共享、合作与协(二)1.2.3.4.移到与之相关的其他问题解决中;数字化学习与创新是指将信息技术作为工具,去学习和创新;信息社会责任是指信息社会中的个体在文化修养、道德规范和行为自律等方面应尽的责任。

新旧共同点是总目标是提升学生的信息素养。

新课程目标旨在全面提升全体高中学生的信息素养,强调了全面性和全体性。

课程通过提供丰富的资源,帮助学生掌握概念,了解原理,认识价值,学会分析问题,形成多元理解能力,成为合格时代公民。

三、课程结构方面在设计依据上,以立德树人为指导思想,紧扣课程方案设置结构,参考国际标准突出前瞻性、体现学科自身发展特性,使得课程结构更为科学合理、有针对性。

课程结构由原来的必修和选修两类课程的6个模块改为必修、选择性必修和选修三类课程共10个模块。

具体来说,新课标中必修课程分2个模块,分别为数据与计算、信息系统与社会,学分由原来的2学分改为3学分,每学分18课时,共54课时,以此作为学科学业水平合格性考试的依据。

新增选择性必修课程,共6个模块,每个模块2学分,每学分18课时,需36课时。

作为必修课程的拓展与加深,学生可在修满必修学分的基础上,根据能力、发展需要选学。

其中数据与数职业选同时,学业质量水平的高低是阶段性评价、学业水平合格性考试和学业水平等级性考试命题的重要依据,其中学业质量水平2是高中毕业生在本学科应达到的合格要求,而学业质量水平4则作为学业水平等级性考试的命题依据。

六、实施建议实施建议主要从教学与评价建议、水平等级考试命题建议、教材编写建议及课程实施建议四个方面展开。

西安交大计算方法B2017大作业

西安交大计算方法B2017大作业

计算方法B上机报告某某:学号:班级:学院:任课教师:2017年12月29日题目一:1.1题目内容某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。

在铺设光缆之前需要对沟底的地形进展初步探测,从而估计所需光缆的长度,为工程预算提供依据。

已探测到一组等分点位置的深度数据(单位:米)如下表所示:(1)请用适宜的曲线拟合所测数据点;(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;1.2 实现题目的思想与算法依据首先在题目〔1〕中要实现的是数据的拟合,显然用到的是我们在第三章中数据近似的知识内容。

多项式插值时,这里有21个数据点,如此是一个20次的多项式,但是多项式插值随着数据点的增多,会导致误差也会随之增大,插值结果会出现龙格现象,所以不适用于该题目中点数较多的情况。

为了防止结果出现大的误差,同时又希望尽可能多地使用所提供的数据点,提高数据点的有效使用率,这里选择分段插值方法进展数据拟合。

分段插值又可分为分段线性插值、分段二次插值和三次样条插值。

由于题目中所求光缆的现实意义,而前两者在节点处的光滑性较差,因此在这里选择使用三次样条插值。

根据课本SPLINEM 算法和TSS 算法,采用第三种真正的自然边界条件,在选定边界条件和选定插值点等距分布后,可以先将数据点的二阶差商求出并赋值给右端向量d ,再根据TSS 解法求解三对角线线性方程组从而解得M 值。

求出M 后,对区间进展加密,计算200个点以便于绘图以与光缆长度计算。

对于问题〔2〕,使用以下的公式:20=()L f x ds ⎰20(f x =⎰191(k kk f x +==∑⎰1.3 算法结构1.For n i ,,2,1,0⋅⋅⋅=1.1 i i M y ⇒2. For 2,1=k2.1 For k n n i ,,1, -=2.1.1 i k i i i i M x x M M ⇒----)/()(13. 101h x x ⇒-4. For 1-,,2,1n i =4.1 11++⇒-i i i h x x4.2 b a c c h h h i i i i i i ⇒⇒-⇒+++2;1;)/(11 4.3 i i d M ⇒+165. 0000;;c M d M d n n ⇒⇒⇒λn n n b a b ⇒⇒⇒2;;20μ6. 1111,γμ⇒⇒d b7. For m k ,,3,2 =! 获取M 的矩阵元素个数,存入m7.1 k k k l a ⇒-1/μ 7.2 k k k k c l b μ⇒⋅-1- 7.3 k k k k l d γγ⇒⋅-1- 8. m m m M ⇒μγ/9. For 1,,2,1 --=m m k9.1 k k k k k M M c ⇒⋅-+μγ/)(1 10. k ⇒1! 获取x 的元素个数存入s 11. For 1,,2,1-=s i11.1 if i x x ≤~ then k i ⇒;breakelse k i ⇒+112. xx x x x x h x x k k k k ˆ~;~;11⇒-⇒-⇒--- y h x h M y x h M y x M x M k k k k k k ~/]ˆ)6()6(6ˆ6[2211331⇒-+-++---1.4 matlab 源程序n=20; x=0:n;y=[9.01 8.96 7.96 7.97 8.02 9.05 10.13 11.18 12.26 13.28 13.32 12.61 11.29 10.22 9.15 7.90 7.95 8.86 9.81 10.80 10.93];M=y; %用于存放差商,此时为零阶差商 h=zeros(1,n+1); c=zeros(1,n+1); d=zeros(1,n+1); a=zeros(1,n+1); b=2*ones(1,n+1); h(2)=x(2)-x(1);for i=2:n %书本110页算法SPLINEM h(i+1)=x(i+1)-x(i); c(i)=h(i+1)/(h(i)+h(i+1)); a(i)=1-c(i); enda(n+1)=-2; %计算边界条件c(0),a(n+1),采用的是第三类边界条件 c(1)=-2;for k=1:3 %计算k 阶差商for i=n+1:-1:k+1M(i)=(M(i)-M(i-1))/(x(i)-x(i-k));endif(k==2) %计算2阶差商d(2:n)=6*M(3:n+1); %给d赋值endif(k==3)d(1)=(-12)*h(2)*M(4); %计算边界条件d(0),d(n),采用的是第三类边界条件 d(n+1)=12*h(n+1)*M(n+1);endendl=zeros(1,n+1);r=zeros(1,n+1);u=zeros(1,n+1);q=zeros(1,n+1);u(1)=b(1);r(1)=c(1);q(1)=d(1);for k=2:n+1 %利用书本49页算法TSS求解三对角线性方程组r(k)=c(k);l(k)=a(k)/u(k-1);u(k)=b(k)-l(k)*r(k-1);q(k)=d(k)-l(k)*q(k-1);endp(n+1)=q(n+1)/u(n+1);for k=n:-1:1p(k)=(q(k)-r(k)*p(k+1))/u(k);endfprintf('三对角线性方程组的解为:');disp(p);%求拟合曲线x1=0:0.1:20; %首先对区间进展加密,增加插值点n1=10*n;x2=zeros(1,n1+1);x3=zeros(1,n1+1);s=zeros(1,n1+1);for i=1:n1+1for j=1:nif x1(i)>=x(j)&&x1(i)<=x(j+1) %利用书本111页算法EVASPLINE求解拟合曲线s(x)h(j+1)=x(j+1)-x(j);x2(i)=x(j+1)-x1(i);x3(i)=x1(i)-x(j);s(i)=(p(j).*(x2(i)).^3/6+p(j+1).*(x3(i)).^3/6+(y(j)-p(j).*((h(j+1)).^2/6)).*x2( i)+...(y(j+1)-p(j+1).*(h(j+1)).^2/6).*x3(i))/h(j+1);endendendplot(x,-y,'x') %画出插值点hold onplot(x1,-s) %画出三次样条插值拟合曲线hold ontitle('三次样条插值法拟合电缆曲线');xlabel('河流宽度/m');ylabel('河流深度/m');Length=0;for i=1:n1L=sqrt((x1(i+1)-x1(i))^2+(s(i+1)-s(i))^2); %计算电缆长度 Length=Length+L;endfprintf('电缆长度(m)=');disp(Length);1.5 结果与说明由上图可以看出,所得到的曲线光滑,能够较好得反映实际的河沟底部地势形貌。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1有52张牌,使它们全部正面朝上,第一轮是从第2张开始,凡是2的倍数位置上的牌翻成正面朝下;第二轮从第3张牌开始,凡是3的倍数位置上的牌,正面朝上的翻成正面朝下的,正面朝下的翻成正面朝上的;以此类推,直到翻得牌超过104张为止。

统计最后有几张牌正面朝上以及它们的位置号。

问题分析:52张牌都有一个初始状态,即全部朝上。

第一轮开始时,2的倍数位置改变,非2的倍数保持原样;第二轮开始时,3的奇数倍朝下,3的偶数倍朝上;第三轮开始时,4的倍数朝上,即2的偶数倍朝下,以此类推,直到牌数超过104,则进行状态统计。

算法设计:根据题意,首先对第一轮进行记录,算法则应该是依次对位置进行改变,用循环求解翻转问题。

算法分析:这个算法使用循环对牌进行逐层比较,算法复杂度为O(n+1),使用了52个空间的一维数组。

数据结构设计:用一维数组a[52]表示52张牌,设其初始状态为0。

计数小于104时,第一轮开始进行翻转,下一轮即n+1轮开始分情况进行翻转,用整型shang 进行朝上个数的统计,位置则由i来确定。

算法如下:#include <stdio.h>int main(){int a[52] = {0}; //用一维数组表示52张牌,0表示正面朝上int shang = 0; //正面朝上的个数int i = 0;int count= 0; //次数统计int n=1;while(count <=104){if(n == 1){for(i = n+1;i <=52;++i){if(i%(n+1) == 0){a[i-1] = 1;//front--;++count;}}n++;}elsefor(i = n+1;i <=52;++i){if(i%(n+1) == 0){if(a[i-1] == 0){ a[i] = 1;++count;}else{a[i] = 0;++count;}}}n++;}}for(i = 0;i < 52;++i){if(a[i] == 0){shang++;}}printf("正面朝上的扑克有:%d\n",shang); printf("它们的位置号为:\n");for(i = 0;i < 52; ++i)if(a[i] == 0){printf("%d\t",i);}}printf("\n");return 0;}运行结果如下:1.键盘输入n个正整数,把它们看作一个“数圈”,求其中连续4个数之和最大者。

问题分析:用数1到n表示键盘输入的数,把连续4个数之和同前后进行比较,求出和最大,可利用二重循环把所有情况进行列举。

算法设计:用1,2,3…n代表输入的数,其存储的值代表连续4个数之和。

第一层循环:范围从n到n+4;第二层循环:范围从1到n;最后对和进行比较,然后输出。

算法分析:算法效率为O(4n),存储空间上有些浪费,可根据实际情况进行空间分配。

数据结构设计:首先用一个一维数组表示键盘输入的数,定义一个最大数,设置其初始状态为0,把连续4个数的和用he表示,再同max进行比较,输出内容就是问题的解。

算法如下:#include<stdio.h>int main(void){int ch[120], n, i, j, he=0, max=0, maxi;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&ch[i]);for(i=n;i<n+4;i++)ch[i]=ch[i-n];for(i=0;i<n;i++){he=ch[i]+ch[i+1]+ch[i+2]+ch[i+3];if(he>max){max=he; maxi=i;}}i=maxi;printf("最大和=%d+%d+%d+%d=%d\n",ch[i],ch[(i+1)%n],ch[(i+2)%n],ch[(i+3)%n],he);return 0;}运行结果如下:2.有一堆棋子,2枚2枚地数,最后余1枚;3枚3枚地数,最后余2枚;5枚5枚地数,最后余4枚;6枚6枚地数,最后余5枚;7枚7枚地数,最后正好数完,编程完成这堆棋子最少有多少枚棋子。

问题分析:用n表示棋子数,要求可以7枚7枚的数,因此棋子数至少为7,问题可以用条件语句进行求解。

算法设计:用7到n表示棋子数,余数表示剩余的棋子数。

设置棋子数的范围,因为不知道具体有多少,所以尽可能的大一点,然后进行情况判别。

算法分析:算法比较简单,但由于预先不知道棋子数,因此效率比较差。

数据结构分析:首先预确定一个棋子数的范围,分别对2、3、5、7进行取余,符合情况则输出棋子数n,不符合则加1,继续进行判断,输出结构符合问题要求。

算法如下:#include<stdio.h>int main(void){int n=7;while(n<1000){if(n%2==1&&n%3==2&&n%5==4&&n%6==5&&n%7==0){printf("%d\n",n);break;}else n++;}return 0;}运行结果如下:3.利用分治法求一组数据中最大的两个数和最小的两个数。

问题分析:用n表示输入的数,最大的两个数和最小的两个数可用循环进行情况列举。

算法设计:用分治法可以用较少的比较次数解决上述问题。

问题可以简化为求最大值和最小值,再把这种情况除外,再求其最大值和最小值。

算法分析:算法中需要n-1次比较,才能得到第一个最大最小值,需要n-2次比较得到第二个最大最小值。

数据结构设计:把输入的数存入一维数组ch[],首先对两个数进行比较,然后大的数或者小的数同下一个比较,直到输出最大的数max1和最小的数min1;下一次继续进行循环比较,输出最大的数max2和最小的数min2。

算法如下:#include <stdio.h>int main(void){int ch[20], n,i,max1=0,max2=0,min1=0,min2=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&ch[i]);for(i=0;i<n;i++){if(ch[max1]<ch[i])max1=i;if(ch[min1]>ch[i])min1=i;}if(max1==0)max2=1;if(min1==0)min2=1;for(i=0;i<n;i++){if(i==max1||i==min1)continue;if(ch[max2]<ch[i])max2=i;if(ch[min2]>ch[i])min2=i;}printf("max1=%d max2=%d min1=%d min2=%d",ch[max1],ch[max2],ch[min1],ch[min2]);return 0;}4.等分液体,在一个瓶子中装有8N(N为偶数)升汽油,要平均分成两份,但只有一个装3(N/2-1)升的量杯和装5(N/2+1)升的量杯(都没有刻度)。

打印出所有把汽油分成两等份的操作过程。

若无解打印“NO”,否则打印操作过程。

问题分析:将8升汽油平分装入两个不同容量的容器,在没有刻度的情况下,一次就平分是不行的,需要利用容器的差异性多次进行最后达到平分,可以通过分析具体情况达到目的。

算法设计:利用深度优先算法进行搜索,不满足均分条件时则及时进行回溯,当满足问题的解则结束。

算法分析:这个算法比较简单,利用条件分支进行判断,来保证不漏判。

数据结构分析:将三个容器的容量定义为常量,在定义两个变量b和c来确定瓶中实际的重量。

根据确定量的不同情况进行分配,最后达到均分的效果。

算法如下:#include <stdio.h>int p=4;int main(){int a=8,y=3,z=5;void fen(int a,int y,int z);fen(a,y,z);fen(a,z,y);return 0;}void fen(int a,int y,int z){int b=0,c=0;printf("a:%d b:%d c:%d\n ",a,y,z,a,b,c); while(a!=p||b!=p&&c!=p){if(!b){a-=y;b=y;}elseif(c==z){a+=z;c=0;}elseif(b>z-c){b-=(z-c);c=z;}else{c+=b;b=0;}printf(" %5d %5d %5d\n",a,b,c); }}程序运行结果:。

相关文档
最新文档