exercise1_ACM.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
exercise1_ACM

第一次作业 1、平面分割方法 设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。 输入示例: 3 输出示例: 8 要求: 用两种方法: 得到第n项与其之前已知项之间的关系,程序用递归实现 得到第n项的通项公式,程序直接实现。 解: 每增加一条封闭曲线该曲线就会与之前的每条曲线产生两个交点,所以会增加2(n-1)个交点。 递归关系:f(n)=f(n-1)+2(n-1)(增加几个交点就增加几个平面),f(1)=2 通项公式:f(n)=n(n-1)+2 //(1) //平面分割方法 int countArea(int n)//递归法 { if(n==1) return 2; else return countArea(n-1)+2*(n-1); } //通项公式法an=2+n(n-1) int countArea2(int n) { return 2+n*(n-1); } 2、LELE的RPG难题 有排成一行的n个方格,用红(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; else return countColor(n-1)+*countColor(n-2); } 假设一个有序数组A[0], A[1], …, A[N-1],编写一个函数int find(int A[], int x),确定一个整数x是否在数组A中,如果在,则返回其位置,否则返回-1 //有序数组元素查找-二分查找 int find(int A[],int n) {//sizeof(A)sizeof写进函数得不到数组所占的内存数,而仅是一个指针的内存大小 int length=0;//参数数组长度 for(int i=0;A[i]!=0;i++) { length++; } int left=0,mid,right=length-1; while(left=right) { mid=(left+right)/2; if(nA[mid]) right=mid-1; else if(nA[mid]) { left=mid+1; } else return 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(left=right) { mid=(left+right)/2; if(xa[mid]) left=mid+1; else if(xa[mid]) right=mid-1; else { //找到了 i=j=mid; return; } } //没找到 i=right; j=left; } 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)

jiulama + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档