(l)int Prime(int n)t int i=2. x=(int) snri(n): while(i 4=x)t if (n%i -=o) break if (1 else return O (2)int suml(int n)( for (int 1-1:is rcturn s (3) int sum2( int n)I int p=l for(inti-t;1≤ return (4) int fun( int n)t while(s < n)s+=+++t return 1: (5) vold Use File( ifstream& inp, int c,3) 假定inp所对应的文件屮保存有n个整数 i=0;i<10;t+÷)c=0 hile (inp f i=x10; cI (6) void mable( int n)t for (int i=1:i<=n: 1+r) for(int)…i;j<=n;j-) 27
f)void cmatrix( int al] 1, int M, int N, int d) M和N为全局整型常敞 (8) void natrimuli( int aJf 1, int b13, int ci 7 i,, int M. int N, int 1.)( 数组aM小、b1」、cM均为整型数组 inti,」.k for(r-0;i<M:it++ ror(j=0;j<;j++) ciC=0 for (i=V;i*M;1-J for(k -o: k N: k++ c[习+n+bk[j 【解答】 (1)判断n是否是一个素数,若是则返回数值1,否则返问0。该算法的时间复杂度为 (2)计算∑!的值,时问复杂度为O(n) (3)计算∑的值。时间复杂度为O(r2) (4)求出满足不等式1-2+3+…-1≥n的最小;值。时间复杂度为O(√n)。 (5)利用数组c[10中的每个元素c门]对应统计出inp所联系的幣数文件中个位值同 为i的整数个数。叶间复杂度为O(n)。 6)打印出一个具有n行的乘法表,第i行(1≤≤n)中有n-i+1个乘法项,每个乘法 项为i与j(≤j≤n)的乘积。时问复杂度为O(n2)。 (7)使数维a[MN]中的每一个元素均乘以d的值。时间复杂度为O(MxN) (8)矩阵相乘,即aM]N×bNJ]cM[L]。时间复杂度为O(MxN×l)
第2章数组 2.1复习提要 本章主讨论数组拙象数据类型及利用数组实现的長、字符串等数据结构。它们 都是线性结构。但数组是直接存取结构,可以根据数组元素的下标直接在数组中存取该元 ,丽利用它实现的顺序表虽然也可以直接存取,但所有数据元素集中存储于表的前端.字 符弔是顺序表的特化 本章复习的要点 1基本知识点 理解作为抽象数据类型定义的数组类,掌在C+中数组的定义和初始化方法,明确 静态数组和动态数组的不同特点和使用,特别需要注意的是数组的存储结构不定是一个 连续的存储空闷,当数组存放于一个连续的存储空问时叫做数组的顺序存储方式。要求掌 握一维数组、二维数组、维数织的地址计算方汰 首先,需要明确数组是·种实现级的绩钩。 其次.需要理解顺序衣的定义和特点,顺序衣的类定义及其主要操作,如搜索、插人和删 除的实现掌握对它们的性能估计,包括搜索算法的平均搜索长度,插入与删除算法中的对 象平均移动次数,还要掌握顺序表实例的定义和使用净例 接着,需要掌握稀疏芃降的三元组表示·并埋解稀疏矩的转馑运箅的实现及具性能。 此外,需要理解字符串的定义,字符申抽象数据类型的类定义,字符串屮各种軍载操作 的实现和使用,简单的模式匹配算法和匹事例。 2算法设计 (1)静态数组对象的定义,动态数组对象的定义 (2)数组中数纸元索的惊地逆咒 (3)递归计算数组长度、数组中所有元素的和及平均值 (4)在顺序表中搜索值为iem的元素,在有序顺序表中搜索值为iem的元素; (5)在有序顺序表中插入新元素tem到第t个位置 6)在有序顺序表中删除第个元素 (7)两个有序顺应的合并,m个有序顺序長的合并 2.2难点与重点 L作为抽象数据类型的数组:数组的定义、数组的按行顺序仟储与按列顺疗有储 (1)确定数组元素的要紫;行号、列号、元泰值: (2)数组元素的存放地址计算 序衣:顺序表的定义、搜索、插入与删除
(1)顺序表搜索算法、平均比较次数的计算; (2)插人与逦除算法、平均移动次数的计算 3字符串:字符串的定义及其操作的实现 串重载操作的定义与实现 2.3教材中习题的解析 21设n个人围坐在一个圆桌周围,现在从第丶个人川始报数,数到第m个人.计他出局; 然后从出局的下一个人重新开始报数,数到第m个人,冉让他出局 如此反复直到所 有的人全部出局为止。下面要解决的 Josephus问题是:对f任意给定的n,s和m,求出这n 个人的出局序列。请以n=9,s=1,n=5为例,人工模拟 Josephus的求解过程以求得问题 的解 【解答】 出局人的顺序为5,1,7,4,3,6,9,2,8 22试编写一个求解 Josephus问题的两数。用整数序列1,2.3,…,n表示顺序围坐在圆 桌周围的人,并采用数组長示作为求解过程中使用的数据结构。然后使用n=9,s=1,m 以及n=9,=1,m=0,或者n-9,s=1,m=10作为输入数据,检查你的程序的确性和 健壮性。最后分析所完成算法的时间复杂度 【解答】 函数源程序清单如下: oid Josephus( int A], int n s. m)[ j, k, tm if(m==0){ cer<<"m=0是无效的参数!"<<ed return ror(1=0:i<n;i--)A[i=i+1 初始化,执行n次 报名起始位省 for(k-n; k>>l; i-=>f 逐个出局执行n1次 =(i-m-1)%k 寻找出局位置 p=A[1 出局者交换到第k】位置 ALk-17--timp: for(k=0;k<m2;k-+){ 全部逆置,得到出局序刘 Ak]=A'n-kIl
k23:6?8.5第:人出曰=0 43689475平3 29·34715平人出0 报错信息m=0是无效的参数! !?,45679第人出局 口第3人出4-1 k-6245「863菜人出导:=0 45719263第9出输…4 431 k489263117《出 □3629517最终泪桶 当m=1时,时间代价最大。达到(n-1)+(n-2) 1=n(n-1)/2≈((n2) 23设有一个线性长(,e1,…,en,C。1)存放在一个·维数组 Ai arraySize中的前n 个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前m个址内容置 换为 【解答】 emplate< class 'Type >void inverse( Type A]. int n)( for(inti=0;i<=(n-1).2:计+1) tmp=AU:AL-A 24假定数组A[ array Size」中有多个零元素,试写出一个函数,将A屮所有的非零元素依