程序设计习题 第 4 章 排成队
4.1 序列
1. 写出单元格的值
A |
B |
|
1 |
=[7,9,6,23,56,1+20] |
[7,9,6,23,56,1+20] |
2 |
=A1(6) |
=B1(6) |
3 |
=A1.to(2) |
=A1(A1(3)) |
4 |
=A1.to(3,5) |
=A1(4)+A1(5) |
5 |
=A1.to(3,) |
>A1(6)=1 |
6 |
=A1(6) |
=A1.m(-2) |
7 |
=A1.m([-2,-4]) |
=A1([2,4]) |
8 |
=A1.m(-2:-4) |
2. 序列操作练习
(1)生成一个长度为10的序列,序列成员取值为100以内的随机整数
(2)取出第1,3,5个成员
(3)取出倒数3个成员
(4)修改第5,6,7个成员值为1,2,3
(5)在末尾新增1个成员,取值为第3个成员值的2倍
(6)删除第4和第6个成员
(7)倒置序列成员,例如[1,2,3,4]倒置后[4,3,2,1]
3. 打印序列[1,2,3,4,5,6,7,8,9,10]的每一个成员
4. 编程实现函数A.rvs()功能,将序列[1,2,3,4,5,6,7,8,9,10]成员倒置
5. 将序列[1,3,5,7,9]中的内容和序列[2,4,6,8,10]中的内容进行交换。
6. 求序列最大值及其位置
7. 交换最大值和最小值位置,例如[2,1,3,15,7,9],交换后[2,15,3,1,7,9]
8. 序列中输入10名学生的成绩,如[95,92,83,89,76,98,58,77,85,90],输出总分和平均分
9. 输入10个学生的成绩,将高于平均分的学生成绩存入新的序列并输出
10. 求1~100之间每位数的乘积大于每位数的和的数,结果写入序列
4.2 序列循环
1. 输入一个长度为9的有序序列如[1,2,3,4,6,7,8,9,10],再输入一个数x,将x插入到序列中,从小到大。
2. 在一个序列中查找具体的某个数字n,如果n存在序列中输出其位置,如果n不存在输出null
3. 将序列[2,0,6,1,77,0,52,1,25,7]中大于等于10的成员选出来,并放入新的序列
4. 将序列[2,0,6,1,77,0,52,0,25,7]中的0去掉,形成一个不包含0的序列
5. 请编写代码,随机生成六个0-100之间的整数存放到序列中,并计算出序列中成员的和,输出该序列及求和值
6.
(1)定义一个序列其中包含多个数字。用自己的方式最终实现,奇数放在序列的左边,偶数放在序列的右边。(可以创建其他序列,不必在原序列中改变)
(2)要求在原序列中改变,实现奇数在左边,偶数在右边
7. 长度为N的序列中,从1到N-1有一个值重复两次,找出重复值
如从[4,3,5,8,5,2,1,9,6,7]中找出重复值5
8. 给定一个整数序列nums 和一个整数目标值 target,请你在该序列中找出和为目标值 target的那两个整数,并输出它们的位置。
假设每种输入只会对应一个答案。但是,序列中同一个成员在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[1,2]
解释:因为2+7=9,输出2和7的位置[1, 2] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[2,3]
9. 给你一个整数序列 nums ,判断是否存在三元组 [nums(i), nums(j), nums(k)] 满足 i != j、i != k 且 j != k ,同时还满足 nums(i) + nums(j) + nums(k) == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[-1,-1,2]和[-1,0,1]
解释:
nums(0) + nums(1) + nums(2) = (-1) + 0 + 1 = 0 。
nums(1) + nums(2) + nums(4) = 0 + 1 + (-1) = 0 。
nums(0) + nums(3) + nums(4) = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。
示例2:
输入:nums = [0,1,1]
输出:空
解释:唯一可能的三元组和不为 0
示例3:
输入:nums = [0,0,0]
输出:[0,0,0]
解释:唯一可能的三元组和为 0
提示:
3 <= nums.length <= 3000
-10^5 <= nums[i] <= 10^5
4.3 多层序列
1. 写出代码结果
A |
|
1 |
=[[11,12],[21,22,23],[31,32,33,34]] |
2 |
=A1(2) |
3 |
=A1(3)(4) |
4 |
>A1(1)(2)=0 |
5 |
=A1.len() |
6 |
=A1(3).len() |
7 |
>A1(2)=0 |
2. 请使用二层序列存储如下数据,并遍历显示
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
3. 将九九乘法表的计算结果按行写入二层序列,[[1],[2,4],[3,6,9],……,[9,18,27,36,45,54,63,72,81]]
1×1=1
1×2=2,2×2=4
1×3=3,2×3=6,3×3=9
……
1×9=9,2×9=18,3×9=27,4×9=36,5×9=45,6×9=54,7×9=63,8×9=72,9×9=81
4. 公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
5. 一个3行4列的二级序列,序列成员的值是其对应行号的平方与对应列号之和。输出该二级序列并求该序列的所有成员之和。
6. 一个4行4列的二层序列,求该序列主对角线之和。
7. 使用随机函数初始化一个4行5列的二层序列,求该二层序列中最小值以及该最小值第一次出现的位置。
8. 输入六个随机数到2行3列的二级序列a中, 将二级序列a中的序列成员转置,即行列互换,存储到3行2列的二级序列b中,输出二级序列b中的成员。
9. 计算方形矩阵,如[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]的下三角成员之和
10. 10*10大小的二级序列,随机放10个地雷,显示没有地雷的位置周围有几个地雷。
提示:用0~8代表地雷个数,9代表地雷
一定是10个地雷
A.contain(xi ,…),判断数据是否为序列成员
4.4 理解对象
1. 看代码,写结果
A |
B |
|
1 |
=5 |
=A1 |
2 |
>B1=6 |
|
3 |
=[5] |
=A3 |
4 |
>B3=[7,8] |
|
5 |
=[1,2,3,4,5] |
=A5 |
6 |
>B5(2)=99 |
|
7 |
=[1]*6 |
|
8 |
>A7(3)=59 |
|
9 |
=[[1]*3]*5 |
|
10 |
>A9(1)(2)=33 |
2. 序列函数练习
(1)生成一个由10到1的连续自然数组成的序列A1
(2)取出其第1、3、5、10个成员,组成新的序列A2
(3)取出A1中奇数位的成员,组成新的序列A3
(4)获取A1中倒数第3个成员
(5)对序列A1中的第6、7、8个成员赋值,分别赋值为99、88、77
(6)在A1的第3个成员位置前插入20和30
(7)在A1的末尾追加成员65
(8)从A1中删除第2、4、5个成员
(9)倒置A1中的成员,生成新的序列A9
3. 找出1000以内的素数,将其存入序列。(用insert 函数编写)
4. 求数字2~50之间每个数的因数,将每个数字和其因数存入二级序列。形如[[2,1,2],[3,1,3],[4,1,2,4],……],每个子序列中第一个位置是2~50之间的数,其他值为其因数。
5. 编程找出1000以内的所有完数,结果放入序列。(用insert 函数编写)
参考答案:
4.1 序列
2.
A |
B |
C |
|
1 |
=[0]*10 |
||
2 |
for 10 |
=rand(100) |
>A1(A2)=B2 |
3 |
=A1([1,3,5]) |
||
4 |
=A1.m(-1:-3) |
||
5 |
=A1.modify(5,[1,2,3]) |
||
6 |
=A1.insert(0,A1(3)*2) |
||
7 |
=A1.delete([4,6]) |
||
8 |
=A1.rvs() |
3.
A |
B |
|
1 |
=[1,2,3,4,5,6,7,8,9,10] |
|
2 |
for A1.len() |
>output(A1(A2)) |
4.
A |
B |
|
1 |
=[1,2,3,4,5,6,7,8,9,10] |
=A1.len() |
2 |
for B1\2 |
=A1(A2) |
3 |
>A1(A2)=A1(B1+1-A2) |
|
4 |
>A1(B1+1-A2)=B2 |
|
5 |
>output(A1) |
5.
A |
B |
|
1 |
=[1,3,5,7,9] |
=[2,4,6,8,10] |
2 |
for A1.len() |
=A1(A2) |
3 |
>A1(A2)=B1(A2) |
|
4 |
>B1(A2)=B2 |
6.
A |
B |
C |
|
1 |
=[2,1,3,15,7,9] |
=A1(1) |
1 |
2 |
for 2,A1.len() |
if A1(A2)>B1 |
>B1=A1(A2) |
3 |
>C1=A2 |
B1 最大值
C1 最大值位置
7.
A |
B |
C |
|
1 |
=[2,1,3,15,7,9] |
=A1(1) |
1 |
2 |
=A1(1) |
1 |
|
3 |
for 2,A1.len() |
if A1(A3)>B1 |
>B1=A1(A3) |
4 |
>C1=A3 |
||
5 |
if A1(A3)<B2 |
>B2=A1(A3) |
|
6 |
>C2=A3 |
||
7 |
>A1(C1)=B2, A1(C2)=B1 |
8.
A |
B |
|
1 |
=[95,92,83,89,76,98,58,77,85,90] |
|
2 |
for 10 |
>B1=B1+A1(A2) |
3 |
>output(B1,B1/10) |
9.
A |
B |
C |
|
1 |
=[95,92,83,89,76,98,58,77,85,90] |
=[] |
|
2 |
for 10 |
>B1=B1+A1(A2) |
|
3 |
for 10 |
if A1(A3)>B1/10 |
=C1.insert(0,A1(A3)) |
4 |
>output(C1) |
10.
A |
B |
C |
|
1 |
=[] |
||
2 |
for 100 |
=A2%10 |
|
3 |
=A2\10 |
||
4 |
if B2*B3>B2+B3 |
=A1.insert(0,A2) |
4.2 序列循环
1.
A |
B |
C |
D |
E |
|
1 |
=[1,2,3,4,6,7,8,9,10] |
||||
2 |
5 |
||||
3 |
if A1(9)<=A2 |
>A1.insert(0,A2) |
|||
4 |
else |
for A1 |
if B4>A2 |
>A1.insert(#B4,A2) |
break |
2.
A |
B |
C |
D |
|
1 |
=[1,3,2,4,9,7,6,8,10] |
|||
2 |
3 |
|||
3 |
for A1 |
if A2==A3 |
>output(#A3) |
break |
4 |
if !A3 |
>output(null) |
3.
A |
B |
C |
|
1 |
[2,0,6,1,77,0,52,1,25,7] |
[] |
|
2 |
for A1 |
if A2>=10 |
>B1.insert(0,A2) |
4.
A |
B |
C |
|
1 |
[2,0,6,1,77,0,52,0,25,7] |
||
2 |
for A1 |
if A2==0 |
>A1.delete(#A2) |
5.
A |
B |
C |
D |
|
1 |
=[0]*6 |
0 |
||
2 |
for A1 |
=rand(100) |
>A1(#A2)=B2 |
>B1+=B2 |
3 |
>output(A1,B1) |
6.
(1)
A |
B |
C |
D |
|
1 |
[1,2,3,4,5,6,7,8,9,10] |
=[0]*A1.len() |
1 |
=A1.len() |
2 |
for A1 |
if A2%2!=0 |
>B1(C1)=A2 |
>C1+=1 |
3 |
else |
>B1(D1)=A2 |
>D1-=1 |
(2)
A |
B |
C |
D |
E |
|
1 |
[1,2,3,4,5,6,7,8,9,10] |
1 |
=A1.len() |
||
2 |
for B1<C1 |
if A1(B1)%2==0 |
|||
3 |
for B1<C1 |
if A1(C1)%2!=0 |
=A1(B1) |
||
4 |
>A1(B1)=A1(C1) |
||||
5 |
>A1(C1)=E3 |
||||
6 |
break |
||||
7 |
>C1-=1 |
||||
8 |
>B1+=1 |
7.
A |
B |
C |
D |
E |
|
1 |
[4,3,5,8,5,2,1,9,6,7] |
||||
2 |
for A1 |
for #A2+1,A1.len() |
if A2==A1(B2) |
>output(A2) |
break |
3 |
if C2 |
break |
8.
A |
B |
C |
D |
E |
|
1 |
[2,7,11,15] |
9 |
|||
2 |
for A1 |
for #A2+1,A1.len() |
if A2+A1(B2)==B1 |
>output([#A2,B2]) |
break |
3 |
if C2 |
break |
9.
A |
B |
C |
D |
E |
|
1 |
[-1,0,1,2,-1,-4] |
||||
2 |
=A1.sort() |
||||
3 |
for A2 |
if A3>0 |
break |
||
4 |
if #A3>1 && A3==A2(#A3-1) |
next |
|||
5 |
=#A3+1 |
||||
6 |
=A1.len() |
for B5<B6 |
=A3+A2(B5)+A2(B6) |
||
7 |
for B5<B6 && A2(B5)==A2(B5+1) |
>B5+=1 |
|||
8 |
for B5<B6 && A2(B6)==A2(B6-1) |
>B6-=1 |
|||
9 |
if D6==0 |
>output([A3,A2(B5),A2(B6)]) |
|||
10 |
>B6-=1 |
||||
11 |
>B5+=1 |
||||
12 |
elseif D6>0 |
>B6-=1 |
|||
13 |
elseif D6<0 |
>B5+=1 |
思路:
1. A.sort()排序
2. 定义3个值,当前值,右相邻值,最大值,将3个值相加
3. 判断相加和=0,右相邻值右移,最大值左移(如果相同需要跳过)
和>0,最大值左移
和<0,右相邻值右移
右相邻值位置>=最大值位置则停止移动,进行下一个当前值
4.3 多层序列
2.
A |
B |
C |
D |
|
1 |
=[0]*5 |
|||
2 |
for 5 |
>A1(A2)=[A2]*A2 |
for A1(A2) |
>output@s(C2) |
3 |
>output("") |
3.
A |
B |
C |
D |
|
1 |
=[0]*9 |
|||
2 |
for 9 |
>A1(A2)=[0]*A2 |
for A2 |
>A1(A2)(C2)=C2*A2 |
4.
A |
B |
C |
|
1 |
=[[22,66,44],[77,33,88],[25,45,65],[11,66,99]] |
||
2 |
for A1 |
for A2 |
>B1=B1+B2 |
5.
A |
B |
C |
D |
|
1 |
=[0]*3 |
|||
2 |
for 3 |
>A1(A2)=[0]*4 |
for 4 |
=A2*A2+C2 |
3 |
>A1(A2)(C2)=D2 |
|||
4 |
>B1+=D2 |
|||
5 |
>output(A1,B1) |
6.
A |
B |
|
1 |
=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] |
|
2 |
for 4 |
>B1+=A1(A2)(A2) |
7.
A |
B |
C |
D |
E |
|
1 |
=[0]*4 |
=999 |
=0 |
=0 |
|
2 |
for 4 |
>A1(A2)=[0]*5 |
for 5 |
=rand() |
|
3 |
>A1(A2)(C2)=D2 |
||||
4 |
if D2<B1 |
>B1=D2 |
|||
5 |
>C1=A2 |
||||
6 |
>D1=C2 |
8.
A |
B |
C |
|
1 |
=[0]*2 |
=[0]*3 |
|
2 |
for 2 |
>A1(A2)=[0]*3 |
|
3 |
for 3 |
>A1(A2)(B3)=rand(100) |
|
4 |
for 3 |
>B1(A4)=[0]*2 |
|
5 |
for 2 |
=A1(B5)(A4) |
|
6 |
>B1(A4)(B5)=C5 |
||
7 |
>output@s(C5) |
||
8 |
>output("") |
9.
A |
B |
C |
|
1 |
=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] |
||
2 |
for A1.len() |
for A2 |
>B1+=A1(A2)(B2) |
10.
A |
B |
C |
D |
|
1 |
=[0]*10 |
=[0]*10 |
=1 |
|
2 |
for 10 |
>A1(A2)=[0]*10 |
||
3 |
for C1<=10 |
=[rand(9)+1,rand(9)+1] |
if !B1.contain(B3) |
>B1(C1)=B3 |
4 |
>C1+=1 |
|||
5 |
for 10 |
>A1(B1(A5)(1))(B1(A5)(2))=9 |
if B1(A5)(1)-1>0 && B1(A5)(2)-1>0 && A1(B1(A5)(1)-1)(B1(A5)(2)-1)!=9 |
>A1(B1(A5)(1)-1)(B1(A5)(2)-1)+=1 |
6 |
if B1(A5)(1)-1>0 && A1(B1(A5)(1)-1)(B1(A5)(2))!=9 |
>A1(B1(A5)(1)-1)(B1(A5)(2))+=1 |
||
7 |
if B1(A5)(1)-1>0 && B1(A5)(2)+1<=10 && A1(B1(A5)(1)-1)(B1(A5)(2)+1)!=9 |
>A1(B1(A5)(1)-1)(B1(A5)(2)+1)+=1 |
||
8 |
if B1(A5)(2)-1>0 && A1(B1(A5)(1))(B1(A5)(2)-1)!=9 |
>A1(B1(A5)(1))(B1(A5)(2)-1)+=1 |
||
9 |
if B1(A5)(2)+1<=10 && A1(B1(A5)(1))(B1(A5)(2)+1)!=9 |
>A1(B1(A5)(1))(B1(A5)(2)+1)+=1 |
||
10 |
if B1(A5)(1)+1<=10 && B1(A5)(2)-1>0 && A1(B1(A5)(1)+1)(B1(A5)(2)-1)!=9 |
>A1(B1(A5)(1)+1)(B1(A5)(2)-1)+=1 |
||
11 |
if B1(A5)(1)+1<=10 && A1(B1(A5)(1)+1)(B1(A5)(2))!=9 |
>A1(B1(A5)(1)+1)(B1(A5)(2))+=1 |
||
12 |
if B1(A5)(1)+1<=10 && B1(A5)(2)+1<=10 && A1(B1(A5)(1)+1)(B1(A5)(2)+1)!=9 |
>A1(B1(A5)(1)+1)(B1(A5)(2)+1)+=1 |
思路:随机生成10个放置地雷的位置,且位置不能有重复
每放置一个地雷,周围数字加1
4.4 理解对象
2.
A |
|
1 |
=to(10,1) |
2 |
=A1([1,3,5,10]) |
3 |
=A1.step(2,1) |
4 |
=A1.m(-3) |
5 |
=A1.modify(6,[99,88,77]) |
6 |
=A1.insert(3,[20,30]) |
7 |
=A1.insert(0,65) |
8 |
=A1.delete([2,4,5]) |
9 |
=A1.rvs() |
3.
A |
B |
C |
D |
|
1 |
=[] |
|||
2 |
for 1000 |
if A2==2 |
>A1.insert(0,A2) |
|
3 |
for 2, A2-1 |
if A2%B3==0 |
next A2 |
|
4 |
>A1.insert(0,A2) |
4.
A |
B |
C |
D |
|
1 |
=[] |
|||
2 |
for 2,50 |
>A1.insert(0,[[A2]]) |
||
3 |
for A2 |
if A2%B3==0 |
>A1(A2-1).insert(0,B3) |
5.
A |
B |
C |
D |
|
1 |
0 |
=[] |
||
2 |
for 1000 |
|||
3 |
for A2-1 |
if A2%B3==0 |
>A1+=B3 |
|
4 |
if A1==A2 |
>B1.insert(0,A2) |
||
5 |
>A1=0 |
英文版