程序设计习题 第 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)取出第135个成员

3)取出倒数3个成员

4)修改第567个成员值为123

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的序列中,从1N-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,输出27的位置[1, 2]

示例 2

输入:nums = [3,2,4], target = 6

输出:[2,3]

9. 给你一个整数序列 nums ,判断是否存在三元组 [nums(i), nums(j), nums(k)] 满足 i != ji != 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=22×2=4

1×3=32×3=63×3=9

……

1×9=92×9=183×9=274×9=365×9=456×9=547×9=638×9=729×9=81

4. 公司年销售额求和

某公司按照季度和月份统计的数据如下:单位(万元)

第一季度:22,66,44

第二季度:77,33,88

第三季度:25,45,65

第四季度:11,66,99

5. 一个34列的二级序列,序列元素的值是其对应行号的平方与对应列号之和。输出该二级序列并求该序列的所有数组元素之和。

6. 一个44列的二层序列,求该序列主对角线之和。

7. 使用随机函数初始化一个45列的二层序列,求该二层序列中最小值以及该最小值第一次出现的位置。

8. 输入六个随机数到23列的二级序列a中, 将二级序列a中的序列成员转置,即行列互换,存储到32列的二级序列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(x i ,…)判断数据是否为序列成员

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)生成一个由101的连续自然数组成的序列A1

2)取出其第13510个成员,组成新的序列A2

3)取出A1中奇数位的成员,组成新的序列A3

4)获取A1中倒数第3个成员

5)对序列A1中的第678个成员赋值,分别赋值为998877

6)在A1的第3个成员位置前插入2030

7)在A1的末尾追加成员65

8)从A1中删除第245个成员

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