




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一次作业1、平面分割方法设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。输入示例:3输出示例:8要求:用两种方法:(1) 得到第n项与其之前已知项之间的关系,程序用递归实现(2) 得到第n项的通项公式,程序直接实现。解:(1) 递归关系:f(n)=f(n-1)+2(n-1)(增加几个交点就增加几个平面)(2) 通项公式:f(n)=n(n-1)+2/(1)/平面分割方法int countArea(int n)/递归法if(n=1)return 2;elsereturn countArea(n-1)+2*(n-1);/通项公式法an=2+n(n-1)int countArea2(int n)return 2+n*(n-1);2、LELE的RPG难题有排成一行的个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色求全部的满足要求的涂法.输入示例:3输出示例:6解:递归分析:从f(n-1)增加到f(n)分两种情况:(1)一种是直接在所有已经排好了的f(n-1)序列中插入唯一一个第三色有f(n-1)种;(2)另外是在已经排好了的f(n-2)序列中,插入与缝隙两边其中一个颜色相同的颜色,然后再插入第n个颜色且只需与第n-1种颜色不同有两种,故有2f(n-2)种;递归关系:f(n)=f(n-1)+2f(n-2),(n=2)/(2)LELE的RPG难题int countColor(int n)if(n=2)return 6;else if(n=3)return 6;elsereturn countColor(n-1)+2*countColor(n-2);3、 假设一个有序数组A0, A1, , AN-1,编写一个函数int find(int A, int x),确定一个整数x是否在数组A中,如果在,则返回其位置,否则返回-1/(3)/有序数组元素查找-二分查找int find(int A,int n)/sizeof(A)sizeof写进函数得不到数组所占的内存数,而仅是一个指针的内存大小 int length=0;/参数数组长度for(int i=0;Ai!=0;i+)length+;int left=0,mid,right=length-1;while(left=right)mid=(left+right)/2;if(nAmid)left=mid+1;elsereturn mid;return -1;4、假设数组a中的元素是按从小到达顺序排列的,函数find(int a, int n, int &i, int &j, int x)利用二分搜索法确定x是否在含有n个元素的数组a中,如果不在,则参数i为小于x的最大元素的下标,参数j为大于x的最小元素的下标。如果x在数组a中,则i与j相等,都为等于x的元素的下标。/(4)二分查找定位void find2(int a,int n,int &i,int &j,int x)int left=0,mid,right=n-1;while(leftamid)left=mid+1;else if(xamid)right=mid-1;elsei=mid;j=mid;if(xaleft)/或者xarighti=left-1;j=left;elsei=left;j=left+1;5、百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,公鸡三块钱一只,母鸡两块钱一个,小鸡一块钱三只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?/(5)百鸡问题-枚举法void countChicken()int i,j;double k;/公鸡、母鸡、小鸡for(i=0;i=33;i+)for(j=0;j=50;j+)for(k=0;k=300;k+)if(3*i+2*j+k/3.0=100)cout公鸡in母鸡:jn小鸡:knendl;6、水仙花数:水仙花数是指一个3位数,其各位数字的立方和等于它本身。例如:153是水仙花数,因为153=13+53+33。编程求所有的水仙花数。/(6)三位水仙花数-枚举法void countdaff()int l,m,r,temp;for(int i=100;i=999;i+)r=i%10;temp=i/10;m=temp%10;l=i/100;if(i=pow(r,3)+pow(m,3)+pow(l,3)coutiendl;7、 给定一个矩形,在该矩形中有3个固定的点,以这3个点为中心的气球先后膨胀:膨胀时触碰到矩形的边或其他气球时则停止膨胀。编写程序求以何种顺序膨胀气球时,才能使气球的横切面面积之和为最大。解:(1)以矩形左下角为原点,建立直角坐标系,程序输入的参数为:三个固定点的坐标,矩形的长和宽,输出膨胀顺序;(2)程序对参数的初步处理是算得三点相互之间的距离以及三点分别与矩形的最近距离,然后穷举法列举所有的膨胀顺序,找到使三个圆半径的平方和最小的膨胀顺序;/(7)气球膨胀问题double min(double a,double b,double c)double min=a;if(bmin)min=b;if(cwidth/2?(width-xA):xA;double minA_y=yAheight/2?(height-yA):yA;minRect0=minA_xwidth/2?(width-xB):xB;double minB_y=yBheight/2?(height-yB):yB;minRect1=minB_xwidth/2?(width-xC):xC;double minC_y=yCheight/2?(height-yC):yC;minRect2=minC_xminC_y?minC_x:minC_y;int relative32=0,1,0,2,1,2;bool stat3=true,true,true;/初始化三个气球状态都未膨胀int array3;/临时顺序int terarray3;/气球膨胀最终顺序double rad3;/膨胀后的气球半径double powrad2=0;/半径平方和/开始穷举for(int i=0;i3;i+)/第一个膨胀的气球stati=false;radi=min(minRecti,distancerelativei0,distancerelativei1);/第一个膨胀的气球的半径distancerelativei0-=radi;distancerelativei1-=radi;array0=i+1;/第一个膨胀的气球编号for(int j=0;j3;j+)/第二个膨胀的气球if(statj)statj=false;radj=min(minRectj,distancerelativej0,distancerelativej1);/第二个膨胀的气球的半径distancerelativej0-=radj;distancerelativej1-=radj;array1=j+1;/第二个膨胀的气球编号for(int k=0;kpowrad2)powrad2=(pow(rad0,2)+pow(rad1,2)+pow(rad2,2);terarray0=array0;terarray1=array1;terarray2=array2;coutarray0endl;coutarray1endl;coutarray2endl;cout-endl;/第三个膨胀的气球/恢复第二个气球初始状态/点与点之间的距离distancerelativej0+=radj;distancerelativej1+=radj;statj=true;/恢复第二个气球状态都未膨胀/第二个膨胀的气球/恢复初始状态/点与点之间的距离distance0=sqrt(pow(xA-xB,2)+pow(yA-yB,2);distance1=sqrt(pow(xA-xC,2)+pow(yA-yC,2);distance2=sqrt(pow(xC-xB,2)+pow(yC-yB,2);stat0=true;/恢复三个气球状态都未膨胀stat1=true;stat2=true;/第一个膨胀的气球cout最佳膨胀顺序为:terarray0-terarray1-terarray2endl;/完整程序(+测试):#include#includeusing namespace std;/(1)/平面分割方法int countArea(int n)/递归法if(n=1)return 2;elsereturn countArea(n-1)+2*(n-1);/通项公式法an=2+n(n-1)int countArea2(int n)return 2+n*(n-1);/(2)LELE的RPG难题int countColor(int n)if(n=2)return 6;else if(n=3)return 6;elsereturn countColor(n-1)+2*countColor(n-2);/(3)/有序数组元素查找-二分查找int find(int A,int n)/coutsizeof(A)endl;/sizeof写进函数得不到数组所占的内存数,而仅仅是一个指针的内存大小 int length=0;/参数数组长度for(int i=0;Ai!=0;i+)length+;int left=0,mid,right=length-1;while(left=right)mid=(left+right)/2;if(nAmid)left=mid+1;elsereturn mid;return -1;/(4)二分查找定位void find2(int a,int n,int &i,int &j,int x)int left=0,mid,right=n-1;while(leftamid)left=mid+1;else if(xamid)right=mid-1;elsei=mid;j=mid;if(xaleft)/或者xarighti=left-1;j=left;elsei=left;j=left+1;/(5)百鸡问题-枚举法void countChicken()int i,j;double k;/公鸡、母鸡、小鸡for(i=0;i=33;i+)for(j=0;j=50;j+)for(k=0;k=300;k+)if(3*i+2*j+k/3.0=100)cout公鸡in母鸡:jn小鸡:knendl;/(6)三位水仙花数-枚举法void countdaff()int l,m,r,temp;for(int i=100;i=999;i+)r=i%10;temp=i/10;m=temp%10;l=i/100;if(i=pow(r,3)+pow(m,3)+pow(l,3)coutiendl;/(7)气球膨胀问题double min(double a,double b,double c)double min=a;if(bmin)min=b;if(cwidth/2?(width-xA):xA;double minA_y=yAheight/2?(height-yA):yA;minRect0=minA_xwidth/2?(width-xB):xB;double minB_y=yBheight/2?(height-yB):yB;minRect1=minB_xwidth/2?(width-xC):xC;double minC_y=yCheight/2?(height-yC):yC;minRect2=minC_xminC_y?minC_x:minC_y;int relative32=0,1,0,2,1,2;bool stat3=true,true,true;/初始化三个气球状态都未膨胀int array3;/临时顺序int terarray3;/气球膨胀最终顺序double rad3;/膨胀后的气球半径double powrad2=0;/半径平方和/开始穷举for(int i=0;i3;i+)/第一个膨胀的气球stati=false;radi=min(minRecti,distancerelativei0,distancerelativei1);/第一个膨胀的气球的半径distancerelativei0-=radi;distancerelativei1-=radi;array0=i+1;/第一个膨胀的气球编号for(int j=0;j3;j+)/第二个膨胀的气球if(statj)statj=false;radj=min(minRectj,distancerelativej0,distancerelativej1);/第二个膨胀的气球的半径distancerelativej0-=radj;distancerelativej1-=radj;array1=j+1;/第二个膨胀的气球编号for(int k=0;kpowrad2)powrad2=(pow(rad0,2)+pow(rad1,2)+pow(rad2,2);terarray0=array0;terarray1=array1;terarray2=array2;coutarray0endl;coutarray1endl;coutarray2endl;cout-endl;/第三个膨胀的气球/恢复第二个气球初始状态/点与点之间的距离distancerelativej0+=radj;distancerelativej1+=radj;statj=true;/恢复第二个气球状态都未膨胀/第二个膨胀的气球/恢复初始状态/点与点之间的距离distance0=sqrt(pow(xA-xB,2)+pow(yA-yB,2);distance1=sqrt(pow(xA-xC,2)+pow(yA-yC,2);distance2=sqrt(pow(xC-xB,2)+pow(yC-yB,2);stat0=true;/恢复三个气球状态都未膨胀stat1=true;stat2=true;/第一个膨胀的气球cout最佳膨胀顺序为:terarray0-terarray1-t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南大理州教育体育系统校园招聘工作人员176人考试参考题库及答案解析
- 2025浙江温州市人才资源开发有限公司招聘2人考试参考题库及答案解析
- 皮带通廊与彩瓦安装详细施工方案范例
- 2025贵州盘州市保田镇青云幼儿园秋季学期教师招聘考试参考题库及答案解析
- 汽车买卖协议标准版
- 2025中国煤炭销售运输有限责任公司招聘电力交易人员2人考试参考题库及答案解析
- 2025宁夏固原西吉县审计局聘请专业人员辅助审计工作7人考试参考题库及答案解析
- 上海市分行2026年度校园招聘考试参考题库及答案解析
- 2025年合肥庐江县科创建设投资有限公司公开选聘副总经理1名考试参考题库及答案解析
- 社区护理期末考试题库及答案解析
- 单元考点必刷卷 (一)(含答案)我上学啦 2025-2026学年北师大版一年级数学上册
- 农村厨师安全培训课件
- 2025-2026学年人教版(2024)小学体育与健康三年级(全一册)教学设计(附目录P114)
- 轧钢安全规程培训课件
- 2025年下半年上海市新航社区服务总站招聘5人备考练习题库及答案解析
- 2025版防洪堤坝加固工程施工合同
- 2025年消防经济学试题及答案
- 2025-2026学年人教版(2024)小学美术三年级上册教学计划及进度表
- 2025年秋期新教材人音版三年级上册小学音乐教学计划+进度表
- 14.守望生命 课件 九年级上册《心理健康教育》(鲁教版)
- 2025年医院安全员安全技能测试
评论
0/150
提交评论