字符数组教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 例3:数组的划分 6.2.3节要求分段输出学生成绩。一种可能方式是调整成绩排列,把不及格成绩移到左边,及格成绩移到右边,而后顺序输出 按照某种标准把数组里的数据分段称为“划分” 考虑一种划分算法:用两个下标变量,逐步从两端向中间移,保证下图所示的不变关系: 循环开始时令 i = 0,j = n-1,关系成立 到 i = j 不成立时,划分完成 * 划分循环: for (i = 0, j = n - 1; i j; ) { while (i = j scores[i] PASS) ++i; while (i = j scores[j] = PASS) --j; if(i j) { x = scores[i]; scores[i] = scores [j]; scores [j] = x; ++i; --j; } } ? if (i == j scores[i] PASS) ++i; 循环结束时,scores里下标0到i-1是小于60分的成绩,下标i到n-1是不小于60的成绩,i是不及格人数。 * 划分函数: int partition(int num, double a[], double cut) { double x; int i = 0, j = num - 1; while (i = j) { while (i = j a[i] cut) ++i; while (i = j a[j] = cut) --j; if (i j) { x = a[i]; a[i] = a [j]; a[j] = x; ++i; --j; } } return i; } 例4:m个猴子选大王,报n的出列。m=8,n=3 算法思路: 数组a[m]:数组元素下标代表1?m只猴子 数组元素内容代表下一只要报数的猴子 整数p:正在报数的猴子 整数q:前一个报数的猴子 整数t:p所指猴子所报的数 初值 1 8 7 6 5 4 3 2 a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] q p t=0 const int m=8;n=3; int a[ ]={0,2,3,4,5,6,7,8,1}; int q=m, p=a[m], t=0; 或for( i=1;im;i++) a[i] =i+1; a[m] =1; q=m; p=a[m]; t=0; 0 a[0] a[0]不用 Josephus问题 1 8 7 6 5 4 3 2 a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] q p t=0 报数开始,直到剩下一只猴子 do{ }while 下一个要报数的猴子将成为现在报数的猴子 (p!=a[q]); 确定现在报数的猴子,报数 p=a[q]; t=t+1; if ((t % n)!=0 ) 如果t不是n的倍数 yes: no: 当前报数的猴子p成为前一个报数的猴子q q=p; else 当前猴子退出,调整报数次序 当前报数猴子的内容a[p]赋给前一个报数猴子q的内容a[q] a[q] =a[p]; q * #includestdio.h int main( ) { int m = 8, n = 3; int a[] = {0, 2, 3, 4, 5, 6, 7, 8, 1}; int q, p, t; q = m; t = 0; do{ p = a[q]; t = t+1; if ((t % n) != 0 ) q = p; else a[q] = a[p]; } while(p != a[q]); printf(The king is %dth\n, p); return 0; } 如何用函数改写? p t=1 猴子选大王过程 do{ p=a[q]; t=t+1; If ((t % n)!=0) q=p; else a[q] =a[p] ; }while(p!=a[q]) do{ p=a[q]; t=t+1; If( (t % n)!=0 ) q=p; else a[q] =a[p] ; }while(p!=a[q]) 初值:q=m=5;n=2 t=0; q a[1] a[2] a[3] a[4] a[5] 1 5 4 3 2 a[1] a[2] a[3] a[4] a[5] 1 5

文档评论(0)

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

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

1亿VIP精品文档

相关文档