程序设计习题 第 5 章 一把抓

 

5.1 集合运算

1. 看代码写结果


A B
1 =to(10,1)
2 =A1.to(2,6) =A1.to(9,3)
3 =A2|B2 =B2|A2
4 =A2&B2 =B2&A2
5 =A2^B2 =B2^A2
6 =A2\B2 =B2\A2
7 =[A2,B2,A3] =[A3,A4,B2]
8 =A7|A5 =A7|[A5]
9 =A8(2|to(3,5)) =A7(1)([1,3,5])
10 =A7&B7 =A10([2,3])(1)([6,3,2])
11 =A7^B7
12 =A7\B7

2. 将序列[2,0,6,1,77,0,52,1,25,7]中大于等于10的成员选出来,并放入新的序列

3. 编程找出1000以内的所有完数,结果放入序列。(用集合运算)

4. 定义一个序列其中包含多个数字。用集合运算的方式实现奇数放在序列的左边,偶数放在序列的右边。(可以创建其他序列,不必在原序列中改变)

5. 任意输入8个整数存放在一个序列中,然后将奇数和偶数分别存入到两个不同的序列中,并按奇数、偶数交替的顺序输出这两个序列中的所有数据(先交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数)。

6. 序列去重。

需求:

1. 输入一个长度为10的整型序列,并存入10个整数,其中有一些数据是重复的

2. 对序列进行去重,存入新的序列,不能改变序列中原来数字的顺序

7. 产生101-20之间的随机数放入入列,要求随机数不能重复

5.2 循环函数

1. 1)使用循环函数生成一个长度为10的序列A1,序列值为随机数

2)将A1的每个成员值减去5,得到序列A2

3)求A2成员值的平方和

2. 计算2+4+6+……+100的和

3. 计算n的阶乘,前20

4. 计算级数:S=1+1/3+1/5+1/7+……的前100项之和

5. 编程计算表达式..n取值100

6. 1/(1x(1+1))+1/(2x(2+1))+1/(3x(3+1))+1/(4x(4+1))+1/(5x(5+1))...............1/(n(n+1)),计算前 100 项和

7. 大衍数列 0、2、4、8、12、18、24、32、40、50------

通项式:

an=(n×n-1)÷2 (n 为奇数)

an=n×n÷2 (n 为偶数)

求其前 100 项

8. 1/2-2/3+3/4-……+(-1)n-1n/n+1,求前20项和

9. ..,取前10项求ln2的近似值

10. 用幂级数展开式..,求..的近似值,取前 5 项。

5.3 循环函数进阶

1. 序列 [2,5,-3,8,9,7],对奇数项计算绝对值,偶数项计算平方

2. 序列[1,2,1,5,3,4,8]中的奇数加5,偶数乘2,然后求均值

3. 将两个长度相同的序列[2,5,-3,8,9,7][1,2,3,4,5,6]对位相减

4. 用循环函数将序列逆序,如[2,5,-3,8,9,7],变为[7,9,8,-3,5,2]

5. 使用循环函数生成序列[[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]

6. 一个34列的二级序列,序列元素的值是其对应行号的平方与对应列号之和,求其所有元素之和。

7. 某股票20日价格数据[15.8,15.92,16.05,16.4,16.28,16.39,15.75,15.38,15.21,14.68,14.85,14.98,15.2,15,15.18,14.59,14.7,14.45,14.31,13.68]

1)求最大的日增长额

2)求5日移动均值MA 5MA 5 = (前四天价格+前三天价格+前天价格+昨天价格+当天价格)/5

8. 某股票20日涨跌幅数据[-0.7538,-0.81,-2.1341,0.7371,-0.6711,4.0635,2.4057,1.1177,3.6104,-1.1448,-0.8678,-1.4474,1.3333,-1.1858,4.0439,-0.7483,1.7301,0.9783,4.6053,-5.5901],计算每日的累计涨跌幅。

9. 一个44列的二层序列,用循环函数计算该序列主对角线之和。

10. 输入六个随机数到23列的二级序列a中, 将二级序列a中的序列成员转置,即行列互换,存储到32列的二级序列b中。(用循环函数实现)

5.4 迭代函数

看代码写结果


A
1 =[2,222,22,122,2222]
2 =A1.iterate(~*2)
3 =A1.iterate@a(~*2)
4 =A1.iterate(~~*2,3)
5 =A1.iterate(~~*2,5,~>500)

5.5 定位选出

1. 序列[2,0,6,1,77,0,52,1,25,7]

1)取出倒数第2个成员

2)取出第236-3个成员

3)从第1个成员开始,每隔3个取一个

4)选出大于等于10的成员

5)选出不为0的成员

6)选出奇数号成员

7)找出所有0出现的位置

8)找出所有奇数成员位置

9)对序列中的成员求正弦,求正弦最大值,最大值位置以及对应的原序列成员

2. 计算1+2+3+……+100中所有奇数和偶数的和。用step()函数

3. 某产品销售数量和价格关系如图,有订单数量[221,87,33,73,162,227,403,288,78,213,374,152],求其对应的价格

..

4. 用选出函数,选出1~100之间每位数的乘积大于每位数的和的数

5. [95,92,83,89,76,98,58,77,85,90]为十名同学的成绩,找出大于平均分的学生序号。

6. 从序列中[221,87,33,73,162,227,403,288,78,213,374,152]定位成员[227,33,288]对应的位置

7. 交换最大值和最小值位置,例如[2,1,3,15,7,9],交换后[2,15,3,1,7,9]

8. 定义一个序列其中包含多个数字,实现奇数放在序列的左边,偶数放在序列的右边。

9. 给定一个整数序列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]

5.6 排序相关

1. 一组学生的身高和体重数据如下

身高:[1.21,1.35,1.32,1.18,1.46,1.25,1.33,1.37,1.29,1.40]

体重: [24,31,35,28,33,36,37,42,29,32]

1)将学生身高从高到低排序

2)返回身高降序排列的学生序号

3)取前3名身高

4)取前3BMI

5)取前3BMI的学生序号

6)取前3BMI值的学生身高数据

2. 给定一个序列,返回序列在排序之后,相邻元素之间最大的差值 。如果序列元素个数小于 2,则返回 0

示例 1:

输入: nums = [3,6,9,1]

输出: 3

解释: 排序后的序列是 [1,3,6,9], 其中相邻元素 (3,6) (6,9) 之间都存在最大差值 3

示例 2:

输入: nums = [10]

输出: 0

解释: 序列元素个数小于 2,因此返回 0

3. 给定整数序列 nums 和整数 k,请返回序列中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4], k = 2

输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4

输出: 4

4. 给定一个包含 [0, n] n 个数的序列 nums ,找出 [0, n] 这个范围内没有出现在序列中的那个数。

示例 1

输入:nums = [3,0,1]

输出:2

解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 2

输入:nums = [0,1]

输出:2

解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 3

输入:nums = [9,6,4,2,3,5,7,0,1]

输出:8

解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。

示例 4

输入:nums = [0]

输出:1

解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。

参考答案:

5.1 集合运算

2.


A B C
1 =[2,0,6,1,77,0,52,1,25,7]
2 for A1 if A2>=10 >B1=B1|A2

3.


A B C D
1 0 =[]
2 for 1000
3
for A2-1 if A2%B3==0 >A1+=B3
4
if A1==A2 >B1=B1|A2
5
>A1=0

4.


A B C
1 [1,2,3,4,5,6,7,8,9,10]
2 for A1 if A2%2!=0 >B1=A2|B1
3
else >B1=B1|A2

5.


A B C D
1 =[46,68,99,28,50,41,76,39]
2
3 for A1 if A3%2==0 >C1|=A3 >C2+=1
4
else >B1|=A3 >B2+=1
5 if B2<C2 for B2 >output(B1(B5),C1(B5))
6
for B2+1,C2 >output(C1(B6))
7 elseif B2==C2 for B2 >output(B1(B7),C1(B7))
8 else for C2 >output(B1(B8),C1(B8))
9
for C2+1,B2 >output(B1(B9))

6.


A B C
1 =[46,68,99,28,50,41,76,39,99,50] =[]
2 for A1 if !B1.contain(A2) >B1=B1|A2

7.


A B C D
1 =[]
2 for 10 =rand(20)+1 if !A1.contain(B2) >A1|=B2
3

else goto B2

5.2 循环函数

1.


A
1 =10.(rand(100))
2 =A1.(~-5)
3 =A2.sum(~*~)

2.


A
1 =50.sum(2*~)

3.


A
1 =(nf=1,20.((nf*=~,nf)))

4.


A
1 =100.sum(1/(2*~-1))

5.


A
1 =(n=100,n.sum(~*~)/n)

6.


A
1 =100.sum(1/(~*(~+1)))

7.


A
1 =100.(if(~%2==0,~*~\2,(~*~-1)\2))

8.


A
1 =20.sum(if(~%2==0,-~/(~+1),~/(~+1)))

9.


A
1 =10.sum(2/(2*~-1)/power(3,2*~-1))

10.


A B
1 =pi(9/180) >nf=1
2 =A1+to(2,5).sum(power(-1,~-1)*power(A1,2*~-1)/(nf*=(2*~-1)*(2*~-2),nf))

5.3 循环函数进阶

1.


A
1 =[2,5,-3,8,9,7]
2 =A1.(if(#%2==1,abs(~),~*~))

2.


A
1 =[1,2,1,5,3,4,8]
2 =A1.avg(if(~%2==1,~+5,2*~))

3.


A B
1 =[2,5,-3,8,9,7] =[1,2,3,4,5,6]
2 =A1.(~-B1(#))

4.


A B
1 =[2,5,-3,8,9,7] =A1.len()
2 =A1.(A1(B1+1-#))

5.


A
1 =to(5)
2 =A1.(~.(A1.~))

6.


A
1 =to(3)
2 =A1.sum(4.sum(A1.#*A1.#+#))

7.


A
1 =[15.8,15.92,16.05,16.4,16.28,16.39,15.75,15.38,15.21,14.68,14.85,14.98,15.2,15,15.18,14.59,14.7,14.45,14.31,13.68]
2 =A1.(if(#>1,~-~[-1],0))
3 =A1.(avg(~[-4:0]))

8.


A
1 =[-0.7538,-0.81,-2.1341,0.7371,-0.6711,4.0635,2.4057,1.1177,3.6104,-1.1448,-0.8678,-1.4474,1.3333,-1.1858,4.0439,-0.7483,1.7301,0.9783,4.6053,-5.5901]
2 =A1.run(~=~+~[-1])

9.


A
1 =[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
2 =A1.sum(~(#))

10.


A B
1 =2.(3.(rand(100))) =3.(2.(0))
2 =B1.(~.(A1(#)(B1.#)))

5.5 定位选出

1.


A
1 =[2,0,6,1,77,0,52,1,25,7]
2 =A1.m(-2)
3 =A1.m([2,3,6,-3])
4 =A1.step(3,1)
5 =A1.select(~>=10)
6 =A1.select(~!=0)
7 =A1.select(#%2!=0)
8 =A1.pos@a(0)
9 =A1.pselect@a(~%2!=0)
10 =A1.max(sin(~))
11 =A1.pmax(sin(~))
12 =A1.maxp(sin(~))

2.


A
1 =to(100)
2 =A1.step(2,1).sum()
3 =A1.step(2,2).sum()

3.


A
1 =[221,87,33,73,162,227,403,288,78,213,374,152]
2 =[15,13.75,13,12.5]
3 =A1.([30,50,100,300,500].pseg(~))
4 =A2.m(A3)

4.


A
1 =to(100)
2 =A1.select((a=~\10,b=~%10,a*b>a+b))

5.


A
1 =[95,92,83,89,76,98,58,77,85,90]
2 =A1.pselect@a((avg=A1.avg(),~>avg))

6.


A
1 =[221,87,33,73,162,227,403,288,78,213,374,152]
2 =[227,33,288]
3 =A2.(A1.pos(~))

7.


A
1 =[2,1,3,15,7,9]
2 =A1.pmax()
3 =A1.pmin()
4 >(a=A1(A2),A1(A2)=A1(A3),A1(A3)=a)

8.


A
1 =[1,2,3,4,5,6,7,8,9,10]
2 =A1.select(~%2!=0)|A1.select(~%2==0)

9.


A B
1 =[2,7,11,15] 9
2 =A1.(B1-~).select(~+~!=B1)
3 =A2.(A1.pos(~)).select(~>0)

5.6 排序相关

1.


A B
1 =[1.21,1.35,1.32,1.18,1.46,1.25,1.33,1.37,1.29,1.40] =[24,31,35,28,33,36,37,42,29,32]
2 =A1.sort@z()
3 =A1.psort@z()
4 =A1.top(-3)
5 =A1.top(-3,B1(#)/~/~)
6 =A1.ptop(-3,B1(#)/~/~)
7 =A1.top(3;-B1(#)/~/~)

2.


A
1 =[3,6,9,1]
2 =A1.sort()
3 =A2.max(if(#>1,~-~[-1],0))

3.


A B
1 =[3,2,1,5,6,4] >k=2
2 =A1.sort@z()(k)

4.


A B
1 =[9,6,4,2,3,5,7,0,1]
2 =A1.sort()
3 if A2(1)!=0 >B1=0
4 else if A2.m(-1)!=A1.len() >B1=A1.len()
5 else >B1=A2.select(~-~[-1]>1)(1)-1