数组(23)
1.设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。下面要解决的Josephus问题是:对于任意给定的n, sm,求出这n个人的出局序列。请以n = 9, s = 1, m = 5为例,人工模拟Josephus的求解过程以求得问题的解。
2 试编写一个求解Josephus问题的函数。用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。
3 设有一个线性表 (e0, e1, , en-2, en-1) 存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为 (en-1, en-2, , e1, e0)
4 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10)A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示用10进制表示。
5 设有一个nn的对称矩阵A,如图(a)所示。为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。我们把它们按行存放于一个一维数组B中,如图(b)和图(c)所示。并称之为对称矩阵A的压缩存储方式。试问:
    (1) 存放对称矩阵A上三角部分或下三角部分的一维数组B有多少元素?
    (2) 若在一维数组B中从0号位置开始存放,则如图(a)所示的对称矩阵中的任一元素aij在只存上三角部分的情形下((b))应存于一维数组的什么下标位置?给出计算公式。
    (3) 若在一维数组B中从0号位置开始存放,则如图(a)所示的对称矩阵中的任一元素aij在只存下三角部分的情形下((c))应存于一维数组的什么下标位置?给出计算公式。
6 AB均为下三角矩阵,每一个都有n行。因此在下三角区域中各有n(n+1)/2个元素。另设有一个二维数组C,它有nn+1列。试设计一个方案,将两个矩阵AB中的下三角区域元素存放于同一个C中。要求将A的下三角区域中的元素存放于C的下三角区域中,B的下三角区域中的元素转置后存放于C的上三角区域中。并给出计算A的矩阵元素aijB的矩阵元素bijC中的存放位置下标的公式。
7 编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
8. 设有大小不等的 n 个数据组(n 个数据组中数据的总数为 m ,顺序存放在空间区 D,每个数据占一个存储单元,数据组的首地址由数组 S 给出, (如下图所示) ,试编写将新数据 x 插入到第 i 个数据组的末尾且属于第 i 个数据组的算法,插入后,空间区 D 和数组 S 的相互关系仍保持正确。
9.设整数 x1,x2,,xN 已存放在数组 A 中,编写一 PASCAL 递归过程,输出从这 n 个数中取出所有 k 个数的所有组合(k<=n 。例:若 A 中存放的数是 12345k 3
则输出结果应为:543542541532531521432431421321
10.编写一个过程,对一个 n×n 矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。
11.请编写完整的程序。如果矩阵 A 令数组全部的值为0中存在这样的一个元素 A[i,j]满足条件:A[i,j]是第i 行中值最小的元素,且又是第 j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出 m*n 的矩阵 A 的所有马鞍点。
12.给定一个整数数组 b[0..N-1]b 中连续的相等元素构成的子序列称为平台。试设计算法,求出 b 中最长平台的长度。
13. 给定 nxm 矩阵 A[a..b,c..d],并设 A[i,j]A[i,j+1](aib,cjd-1) A[i,j]A[i+1,j](aib-1,cjd).设计一算法判定X的值是否在A,要求时间复杂度为O(m+n)
14. 编写算法,将自然数 1n 按“蛇形”填入 n×n 矩阵中。如图所示: (用程序实现)
1  3  4  10
2  5  9  11
6  8  12  15
7  13  14  16
15. 设二维数组, 1..n] 含有m*n 个整数。
(1) 写出算法:判断 a 中所有元素是否互不相同?输出相关信息(yes/no)
(2) 试分析算法的时间复杂度。
16.设计一个算法,把整数数组中所有的偶数放到所有的奇数之前。要求时间、空间效率尽可能高。
17. S n 个元素的集合,则 S 的幂集 P(S)定义为 S 所有子集的集合。例如, S=(a,b,c),P(S)={() ,(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}给定S,写一递归算法求 P(S)
18. 数组 H[ 11000] 中存放着1000 个大小不同的正整数;   
  1 选择一分类算法使能最快地得到其中 10 个最大的数,简要说明理由;
  2 编写一程序 seek() ,执行该程序时,在命令行中提供二个参数;
          seek a n<enter> 表示需打印H[ ]n 个最大数。
seek I n<enter> 表示需打印H[ ]n 个最小数。
19.已知两个定长数组,它们分别存放两个非降序有序序列,请编写程序把第二个数组序列中的数逐个插入到前一个数组序列中,完成后两个数组中的数分别有序(非降序)并且第一数组中所有的数都不大于第二个数组中的任意一个数。注意,不能另开辟数组,也不能对任意一个数组进行排序操作。例如,
第一个数组为:4,12,28
第二个数组为:1,7,9,29,45
输出结果为:1,4,7--------------第一个数组
9,12,28,29,45---------第二个数组   
20. 设数组 ]中,A[-k][]中元素各自从小到大排好序,试设计一个算法使A[]按从小到大次序排好序。并分析算法所需的计算时间。
21. A[1..100]是一个记录构成的数组,B[1..100]是一个整数数组,其值介于 1 100 之间,现要求按B[1..100]的内容调整 A 中记录的次序,比如当 B[1]=ll 时,则要求将 A[1]的内容调整到 A[11]中去。规定可使用的附加空间为 O(1)
22. 给定有m 个整数的递增有序数组 ]和有n 个整数的递减有序数组 ],试写出算法:将数组a b 归并为递增有序数组 +n](要求:算法的时间复杂度为 O(m+n))
23.在数组 ]中有 n 个数据,试建立一个带有头结点的循环链表,头指针为 h,要求链中数据从小到大排列,重复的数据在链中只保存一个。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。