- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 2)事后测试 目的:运行程序,确定程序实际耗费的时间与空间,验证先前的分析结论——包括正确性、执行性能等,比较、优化所设计的算法。 分析手段:作时、空性能分布图。 * c 信息数字化-例1.5 -问题分析 问题分析:可通过循环,每次假设一名嫌疑犯为小偷,代入问题系统,检验是否只有一句假话。 这种让所有可能解都进行检验,以求得真解的方法称为“枚举尝试法”,也是“蛮力法”、“暴力法” 。 为方便设计程序,将a,b,c,d将四个人进行编号,号码分别为1,2,3,4。 * c 信息数字化-例1.5 -算法设计 算法设计:用变量x存放小偷的编号,则x的取值范围从1取到4,就假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成: a说的话:x1 b说的话:x=3 c说的话:x=4 d说的话:x4或not(x=4) 注意:在x的枚举过程中,当这四个逻辑式的值相加等于3时,即表示“四个人中三人说的是真话,一人说的是假话”。 if ((x!=1)+(x==3)+(x==4)+(x!=4)==3) * c 信息数字化-例1.5 -实现 #include stdafx.h void main() { int x; for(x=1;x=4;x=x+1) if ((x!=1)+(x==3)+(x==4)+(x!=4)==3) printf(%c is a thief,char(64+x)); } * d 学会找规律-例1.6 数组移位 例1.6 数组中有n个数据,要将它们顺序循环向后移k位,即前面的元素向后移k位,后面的元素则循环向前移k位,例:0、1、2、3、4循环移3位后为: 2 、3、4、0、1。考虑到n会很大,不允许用2*n以上个空间来完成此题。 * d 学会找规律-例1.6-问题分析(思路1) 问题分析1:若题目中没有关于存储空间的限制,我们可以方便地开辟两个一维数组,一个存储原始数据,另一个存储移动后的数据。 开始部分的元素从前向后移,容易确定;但数组中后k个元素是从后向前移,如何确定? * d 学会找规律-例1.6-问题分析(思路1) void alg1(){ int a[100],b[100],i,n,k; scanf(%d,%d,n,k); for (i=0;in;i=i+1) scanf(%d,a[i]); for (i=0;in;i=i+1) b[(k+i) % n] = a[i]; for (i=0;in;i=i+1) printf(%d,,b[i]); printf(\n); } * d 学会找规律-例1.6-问题分析 (思路2) 问题分析2: 将最后一个存储空间的数据,存储在临时存储空间中; 其余数据逐个向后移动一位。这样操作共k次就能完成问题的要求。 * d 学会找规律-例1.6-算法设计/实现(思路2) 有可能kn,这样移动会出现重复操作,可以在输入数据后,执行k = k mod n; 以保证不出现重复移动的问题。这个算法的移动(赋值)次数为k*n。当n较大时不是一个好的算法。 void alg2(){ int a[100],i,j,n,k,temp; scanf(%d,%d,n,k); for (i=0;in;i=i+1) scanf(%d,a[i]); for (i=0;ik;i=i+1) { temp = a[n-1]; for (j=n-1;j0;j=j-1) a[j] = a[j-1]; a[0] = temp; } for (i=0;in;i=i+1) printf(%d,,a[i]); printf(\n); } * d学会找规律-例1.6-问题分析 (思路3) 问题分析3 :利用一个临时存储空间,把每一个数据一次移动到位。 1)一组循环移动的情况: 通过计算我们可以确定某个元素移动后的具体位置,如n=5, k=3时:0、1、2、3、4循环移3位后为2、3、4、0、1。 可通过计算得出0移到3的位置,3移到1的位置,1移到4的位置,4移到2的位置,2移到0的位置;一组移动(0-3-1-4-2-0)正好将全部数据按要求进行了移动。这样只需要一个辅助变量,每个数据只需一次移动就可完成整个移动过程。 如果算法就这样按一组移动去解决问题,就错了。因为还有其它情况。 * 2)多组循环移动的情
文档评论(0)