数组及其基本操作一轮复习课件-浙江省高三信息技术选修一_第1页
数组及其基本操作一轮复习课件-浙江省高三信息技术选修一_第2页
数组及其基本操作一轮复习课件-浙江省高三信息技术选修一_第3页
数组及其基本操作一轮复习课件-浙江省高三信息技术选修一_第4页
数组及其基本操作一轮复习课件-浙江省高三信息技术选修一_第5页
已阅读5页,还剩67页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组及其基本操作知识过关

1.数组的概念(1)数组在内存中的存储方式为顺序存储。(2)数组是由相同类型的变量构成的一个序列。(3)数组名和下标组成数组的各个变量称为数组的分量,也称为数组元素。(4)创建数组时,系统会在内存中分配一块连续的存储空间,每个数组元素按照下标顺序存储。(5)一维数组:只有一个下标,下标用来表示数据元素在该序列中的位置。(6)二维数组:有两个下标,表示数据元素在该序列中的行、列位置,二维数组有行优先存储和列优先存储两种方式。2.数组的特性(1)数组元素的数据类型相同。(2)通过数组名和下标对数组元素的值进行访问。(3)存储空间固定不变。归纳总结数组在创建时就分配好了存储空间,即其占用空间已固定,因此删除数组中的元素后,其占用的空间不变。3.数组的基本操作(1)数组的创建。数组的创建实质是在系统内存中划分一块连续区域,用来保存数组所含的所有数据元素。(2)数组元素的访问。①数组元素的访问,指的是寻址到特定的数据元素,并根据存储地址对该数据元素进行读取、修改等操作。②数组元素可以通过数组名和下标直接进行访问。(3)数组元素的插入与删除。①当数组中某个位置要插入一个新数据时,必须先将该位置及后面的所有数据向后移动一个位置,然后将新数据插入。例如,在数组元素a[1]前插入一个新数据datax,操作后的数组a如图所示。②删除数组元素时,需要将被删除元素位置后的所有元素前移一个位置。例如,删除数组元素a[1]后的数组如图所示。4.Python列表常用函数和方法在Python中,常用列表来模拟实现数组的操作。Python列表常用函数和方法函数和方法功能实例len(list1)统计列表list1中元素的个数list1=[1,2,3,4]print(len(list1)),输出为4list1.append(x)在列表list1末尾添加元素xlist1=[1,2,3,4]list1.append(5)列表中的内容为[1,2,3,4,5]

函数和方法功能实例list1.insert(i,x)在列表list1中下标为i位置处插入元素xlist1=[1,2,3,4]list1.insert(2,5)列表中的内容为[1,2,53,4]list1.pop(i)将列表list1中下标为i的元素删除;若i不指定,默认为-1,即删除最后一个元素list1=[1,2,3,4]list1.pop()列表中的内容为[1,2,3]

典例精选【例1】

(2024·浙江1月选考)数组元素a[0]至a[n-1]依次存放着n个数据,现需要将元素a[n-1]插入在下标为x(0≤x<n-1)的位置,例如,n为5,数组a为[0,3,4,6,7],x为2,插入操作后a为[0,3,7,4,6]。实现该功能的程序段如下,方框中应填入的代码是(

)temp=a[n-1]for

i

in

range(n-2,x-1,-1):a[x]=tempA.a[i+1]=a[i] B.a[i-1]=a[i]

C.a[i]=a[i+1] D.a[i]=a[i-1]A【解析】

本题考查数组元素的移动操作。此算法实现的功能是将数组末尾元素a[n-1]移动到指定位置x。因此需要将下标位置范围为[x,n-2]区间内的元素整体向后移动一位。具体方式如下:元素值03467下标

x

n-1初始化元素值03466下标

x

n-1第1步:将6向后移一位覆盖7元素值03446下标

x

n-1第2步:将4向后移一位覆盖6此时下标x所对应的位置空出,可以插入a[n-1]:元素值03746下标

x

n-1第3步:将7插入下标x处因此移位的方向是前面的元素覆盖后面的元素,且参与移位的元素最左侧为下标x。【例2】

(2024·浙江6月选考)某监控设备可定时采集红绿信号灯的状态数据,数据格式记为[a,b],其中a、b分别为红灯和绿灯的状态值,0表示灯灭,1表示灯亮,如[0,1]表示红灯灭、绿灯亮。现要编写程序,每隔1秒采集并检测信号灯是否存在如下异常状态:第一类,红绿灯同时亮或同时灭;第二类,红灯或绿灯超时,即保持同一状态的时长大于上限值(如300秒)。检测到异常状态时就发送相应信息。请回答下列问题:(1)若检测到“红绿灯同亮”的异常,则采集到的数据是__________(单选,填字母)。

A.[0,0] B.[0,1]C.[1,0] D.[1,1]D(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。tlimit

=

300

#

设置信号灯保持同一状态的时长上限值pre

=

[-1,-1]t

=

[0,0]#

t[0]、t[1]分别记录红灯、绿灯保持同一状态的时长while

True:

#

接收一次采集到的状态数据,存入d,代码略

if

①__________________:

ifd[0]==1:

#发送“红绿灯同时亮”信息,代码略

else:

#发送“红绿灯同时灭”信息,代码略

foriin②________________________________________:

ifd[i]==pre[i]:

t[i]+=1

if③__________________:

ifi==0:

#发送“红灯超时”信息,代码略

else:

#发送“绿灯超时”信息,代码略

else:

t[i]=1

pre=d

#延时1秒,代码略d[0]==d[1]range(2)或range(len(pre))或range(len(d))t[i]>tlimit【解析】本题考查Python程序设计。(1)根据题意0表示灯灭,1表示灯亮可知,红绿灯同时亮需表示为[1,1],D正确。(2)程序①处需判断红绿灯是否处于相同状态,若d[0]和d[1]的值相等,同时d[0]=1,表示红绿灯同时亮;否则d[0]=0,表示红绿灯同时灭,故①处代码为“d[0]==d[1]”。②处相关代码的功能为读取一次数据存列表d后需遍历d,故i取值01,故②处代码为“range(2)”。若d[i]=pre[i],表示i所对应的红绿灯相邻两个时刻的状态相同,则相应的红绿灯时长t[i]计数;若时长超过上限值,则表示异常状态;若此时i=0,则表示红灯异常,否则表示绿灯异常,故③处代码为“t[i]>tlimit”。【例3】

(2024·浙江7月学考)小张收集了章回体小说《三国演义》的第1章至第120章的120个文件,其文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写Python程序,对书中人物同时出现的情况进行简单分析,人物及其别名(如“孟德”是“曹操”的别名)作同一人处理。运行程序,用户输入“曹操|孟德刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操,刘备在第11章至第28章同时出现。人物同时出现的章数为:72,章依次为:[[1,2],[5,6],[11,28],[31,45],[47,52],[54,58],[60,74],[77,82],[106,106],[119,120]]人物同时出现的最大连续章数是:18请回答下列问题:(1)观察上图,可知曹操与刘备在第36章中__________(单选,填字母:A.同时/B.没有同时)出现。

主程序如下:#输入姓名、别名,姓名存入列表names,如names=["曹操","刘备"]

统计各个章中,列表names

中每个人物(含别名)出现的次数,将结果存入字典total中,如total={"曹操":[2,5,7,…],

"刘备":[50,47,0,…]},表示曹操在第1,2,3,…章分别出现了2,5,7,…次,代码略num,

result=calculate(total)mlen=getMaxLen(result)print("人物同时出现的章数为:",

num,

",章依次为:")print(result)print("人物同时出现的最大连续章数是:",mlen)A(2)定义函数calculate(total),功能是统计列表names中人物同时出现的章数,以及同时出现的章,结果示例如上图所示,请在画线处填入合适的代码。def

calculate(total):

num,

length=0,0

#

num保存120章中人物同时出现的章数

result=[]

#

result[i][0]、result[i][1]分别存储第i+1段章的起、止章号

k=-1

for

i

in

range(0,

120):

if

allIn(total,

i):

_____________________________

iflength==0:

begin=i+1

result.append([begin,begin])

#在列表result末尾添加一个元素

k+=1

length+=1

result[k][1]=i+1

else:

length=0returnnum,

resultnum+=1或num=num+1(3)定义函数getMaxLen(result),功能是统计最大连续章数,请在画线处填入合适的代码。def

getMaxLen(result):

mlen=0

for

item

in

result:

t=item[1]-item[0]+1

if

t

>__________:

mlen=t

returnmlenmlen(4)定义函数allIn(total,cno),功能是判断列表names中人物是否同时出现在cno章中,若同时出现,返回True,请在画线处填入合适的代码。def

allIn(total,

cno):

for

item

in

names:

if

______________________:

returnFalse

returnTruetotal[item][cno]==0【解析】本题考查Python语言基础及字符串处理的综合知识。(1)观察图可知,第36回出现在[31,45]中,表明曹操与刘备这两个人物在36回同时出现,A正确。(2)由于num保存120个章回中人物同时出现的章回数,其初值为0,因此若检查到符合条件时,即调用函数allIn(total,

cno)且其值为True时,计数器num加1,因此其表达式为num+=1。(3)此处统计最大连续章回数,变量mlen即为返回值。在循环中,将连续章回数t与最大值mlen进行比较,若有比最大值mlen更大的值t,则将t赋值给mlen,故答案是mlen。(4)由于total={"曹操":[2,5,7,…],

"刘备":

[50,47,0,…]},表示曹操在第1,2,3,…章回分别出现了2,5,7,…次,根据这个信息可知,total是一个字典,item是某人物名,cno是某章回号的值,因此若total[item][cno]==0,则表明人物item在章回号cno中出现的次数为0,故函数返回值为False,反之则返回True。

自我检测1.已知列表a=[6,5],b=[6,5,4,3],则a*2+b的结果是(

)A.[6,5] B.[6,5,4,3]C.[6,5,6,5,6,5,4,3] D.程序错误

C【解析】在Python中,乘号的作用是将元素在列表中重复一次,C正确。2.(2023·浙江9+1联考)有如下Python程序段:a=[5,3,8,9,7,3,11]n=len(a)-1cnt=0for

i

in

range(1,n):

if

a[i]==a[i+1]-a[i-1]:

cnt+=1

elif

a[i]>a[i+1]-a[i-1]:

cnt+=2

else:

cnt+=3print(cnt)执行该程序段后,变量cnt的值为(

)A.9 B.10C.11 D.12B【解析】本题考查数组运算的知识。程序段通过for循环遍历列表a中的元素,对于列表a中的第i个元素,如果其等于其相邻两个元素的差,则计数器cnt加1,否则,如果a[i]大于其相邻两个元素的差,则计数器cnt加2,否则计数器cnt加3。列表a中的第2个元素等于其相邻两个元素的差,因此cnt加1,列表a中的第3个到第5个元素都大于其相邻两个元素的差,因此计数器cnt会加2,而第6个元素a[i]小于其相邻两个元素的差,因此cnt加3。因此,最终计数器cnt的值为1+2+2+2+3=10,B正确。3.有如下Python程序段:a=[5,2,7,10,17,25,42,66]c=0for

i

in

range(2,len(a)):

if

a[i-1]+a[i-2]==a[i]:

c=c+1print(c)运行程序后,输出的内容是(

)A.2 B.3C.6 D.7【解析】本题考查对程序的阅读理解能力。变量c,记录的是列表a从下标2开始,满足每个数等于前两个数之和的个数。观察列表a中现有元素,c=3,B正确。B4.(2023·浙江9+1联考)有如下Python程序段:a=[3,5,2,4,1]sum1=m=a[0]for

i

in

range(1,len(a)):

if

a[i]<m:

m=a[i]

sum1+=m执行该程序后,sum1的值为(

)A.6 B.9C.11 D.15【解析】本题考查数组的知识。本题程序的功能是每次将a[i]与m中的较小值累加到变量sum1中,因此sum1=3+3+2+2+1=11,C正确。C数组及其基本操作(A)必备知识练1.(2023·杭州周边重点学校联考)有如下Python程序段:a=[18,2,-1,-7,16,-2,12,8]k1,k2=1,1for

i

in

range(len(a)):

if

a[i]>a[k1]:

k2=k1;k1=i

elif

a[i]>a[k2]:

k2=i该程序段运行后,变量k1,k2的值分别为(

)A.2,5

B.4,0C.5,2 D.0,4【解析】本题考查程序数组知识。分析代码可知,k1是最大数的下标,k2是第二大数的下标,D正确。D2.有一组正整数,要求对其中的奇数和偶数进行交换。交换后奇数在前,偶数在后,并保持相对顺序不变。请在画线处填入合适的代码。下列选项中,正确的是(

)import

randoma=[];n

=

10

for

i

in

range(n):

a.append(random.randint(1,100))b=[0]*n

num=0

k=0

while

k

<n:

if

:

b[num]=a[k]

num+=1

else:

k+=1

for

j

in

:

a[j]=b[j-

n

num]

print(a)A.①a[k]%2==0

②a[k-num]=a[k]

③range(n-num,n)B.①a[k]%2==1

②b[k-num]=a[k]

③range(n-num-1,n)C.①a[k]%2==1

②a[k-num]=a[k]

③range(n-num-1,n)D.①a[k]%2==0

②b[k-num]=a[k]

③range(n-num,n)A【解析】本题考查列表及排序知识。本题实质是列表a中的原始数据,借助于列表b(用于存储偶数),而处理后列表a的前段用于存储原始数据中的奇数。最后再将列表b中的偶数存到列表a的后段。其中变量num记录偶数的个数,k记录当前读取原列表a中的位置,k-num记录向原列表a存取奇数的位置,n-num则表示奇数的个数。例如n=6时,原始数据列表a是[1,4,2,7,5,8]。先将“1,7,5”存入列表a的前三位,而b=[4,2,8,0,0,0],后面的循环for

j

in

range(n-num,n),其作用是将列表b中的偶数再按顺序写入列表a的后半段,此时num=3,n=6,将b[j-n+num]存入a[j],因此最后就得到a列表为[1,7,5,4,2,8],从而实现了目的。A正确。3.(2024·嵊州模拟)数组元素a[0]至a[n-1]依次存放着n个数据,现需要将下标为x(0≤x≤n-1)的元素在逻辑上删除,例如,n为5,数组a为[1,3,5,7,9],x为2,进行删除操作后,输出[1,3,7,9]。实现该功能的程序段如下,画线处应填入的代码是(

)

a=[1,3,5,7,9]

n=len(a)

x=2

for

i

in

range(

):

print(a[:-1])A.①x,n

②a[i-1]=a[i]B.①n-x

②a[i-1]=a[i]C.①x,n

②a[i]=a[i+1]D.①x-n,-1

②a[i]=a[i+1]【解析】本题考查数组元素删除操作。要从数组中删去索引为2的值,需要将[x+1,n-1]范围内的值向前移动1位,②处为移数操作,若为a[i-1]=a[i],则①处应填x+1,n,A、B错误。②若为a[i]=a[i+1],①处应填:x,n-1,C错误。那么应该是采用了负索引,D正确。D4.有n盏灯,一开始全部处于关闭状态,现有n个人对这些灯进行操作:第1个人将所有灯打开,第2个人将所有编号为2的倍数的灯全部关闭,第3个人对所有编号为3的倍数的灯进行反向操作……直到第n个人操作完成。该过程用如下的Python程序段进行模拟:n=int(input())a=[0]*(n+1)

#数组a初始值全为0,灯的状态:0为关,1为开

for

i

in

range(1,n+1):

for

j

in

range(i,n+1):

if

:

画线处应填入的代码是(

)A.①

j

%

i

==

0

a[j]

=

1

a[j]

B.①

i

%

j

==

0

a[j]

=

1

a[j]C.①

j

%

i

==

0

a[i]

=

1

a[i]D.①

i

%

j

==

0

a[i]

=

1

a[i]【解析】本题考查数组知识。根据代码i、j的范围可知,外循环i枚举人,内循环j枚举灯,灯的状态由a[j]来记录,A正确。A5.(2024·杭州二模)有如下Python程序段:#随机产生5个整数,存储在列表a中for

i

in

range(1,5):

k=a[i]

j=i-1

while

j

>=

0

and

abs(a[j]-2)>abs(k-2):

a[j+1]=a[j]

j-=1

a[j+1]=k执行该程序段后,列表a的值可能是(

)A.[-5,-2,4,0,1] B.[3,-1,0,2,-3]

C.[1,2,3,4,5] D.[0,4,0,-2,-4]D【解析】

本题考查插入排序思想。本题是插入排序升序的典型代码,变式在于比较的不是原始数据,而是abs(k-2)与abs(a[j]-2),最终是按abs(a[j]-2)升序排序,即最后每个数据项减2的绝对值应为升序。4个选项结果如下表所示:

ABCD原始值-5,-2,4,0,13,-1,0,2,-31,2,3,4,50,4,0,-2,-4-2-7,-4,2,-2,-11,-3,-2,0,-5-1,0,1,2,3-2,2,-2,-4,-6求绝对值7,4,2,2,11,3,2,0,51,0,1,2,32,2,2,4,6综上所述,D正确。6.(2024·温州三模)有如下Python程序段:from

random

import

randints,i,ans

=1,0,0k=randint(10,24)

#randint(10,24)随机生成10到24(含10和24)之间的整数for

j

in

range(len(nums)):

s=s*nums[j]

while

s

>=k:

s=s/nums[i]

i

+=1

ans+=j-i+1若nums的值为[2,3,4,5],执行该程序段后,变量ans的值不.

可.

能.

是(

)A.4 B.5C.6 D.7A【解析】本题考查数组的相关知识。由于k的取值最大为24,s累乘=2*3*4=24,此时ans累加已经等于6。当s大于等于k的时候i才会加1,s=24/2=12*5=60/3=20,i等于1和2,所以ans=6有可能;若取20,s=20>=20会再增加一次i=3,此时ans=6-3-3+1,故7也有可能;再考虑取最小值k=10的情况,ans的值为5。A符合题意。7.有如下Python程序段:a=[0]*10for

i

in

range(16):

j=0;a[j]=a[j]+1

while

a[j]==3:

a[j]=0

j=j+1

a[j]=a[j]+1执行该程序段后,数组a中各元素之和为(

)A.2 B.3C.4 D.5C【解析】本题考查两重循环和数组运算的知识。经过模拟可知,执行该程序段后,a[0]的值为1,a[1]的值为2,a[2]的值为1,其他元素值均为0,故各元素之和的值为4。该程序段的本质是外循环一共进行15次,而每三次外循环都会触发一次内循环,产生进位,故本题的本质是模拟了三进制的进位规则。(121)3=1*32+2*31+1*30=15,从而得到验证。C正确。关键能力练

8.有如下Python程序段:import

randoma=[0]*6for

i

in

range(1,6):

tmp=random.randint(5,24)

if

tmp%2==0

or

i%2==1:

a[i]=a[i-1]+tmpprint(a)运行程序后,数组a的值可能的是(

)A.[0,9,29,50,0,

20] B.[8,20,44,62,86,109]

C.[0,8,14,21,39,

0] D.[0,10,24,43,0,30]【解析】本题考查数组及随机数知识。分析代码,a[0]元素一定是0,B错误。奇数位上的数一定不为0,C错误。和前面偶数位上的数相差不会超过24,D错误。A9.有如下Python程序段:a

=

[0]*10s

=

"2024.09.19

Good

Luck!";n

=

0for

i

in

range(len(s)):

if

"0"<=s[i]

<=

"9":

m

=

ord(s[i])-

ord("0")

a[m]

=

a[m]

1

for

i

in

range(10):

if

a[i]

>

1:

n

=

n

1print(n)执行该程序段后,输出n的值为(

)A.2

B.3 C.4

D.5【解析】本题考查循环和数组运算知识。由代码可知,程序的目的是统计字符串s中两个以上的数字字符数量(不统计其他字符),算法中使用了桶的概念。观察可知,数字字符“0”“2”“9”的数量都在两个以上,故答案是3,B正确。B10.有如下Python程序段:from

random

import

randintd=[];k=0;i=0while

i<=4:

b=randint(0,9)

#

随机产生一个[0,9]之间的整数

if

b

not

in

d:

d.append(b)

#

在数组a末尾增加元素b

i+=1for

i

in

range(len(d)):

if

d[i]%2==0:

k+=1

else:

d[i-k]=d[i]print(d)执行该程序段后,输出的数组d不.

可.

能.

为(

)A.[7,9,1,1,8] B.[7,5,9,5,9]

C.[9,7,4,7,1] D.[5,1,0,5,1]【解析】本题考查随机数及逻辑判断知识。由while循环代码可知,数组d是一个由5个元素组成的位于[0,9]之间的不重复数据,其中k记录偶数的个数,代码d[i-k]=d[i]的意思是,若a[i]是奇数则将覆盖前面的偶数元素。[9,7,4,7,1]中有两个7,说明已经有一个偶数被覆盖,然后又有元素4,故有两个偶数,k=2,这样最后的奇数元素1一定将元素4覆盖,C符合题意。C11.有一个整型的数组a,要求删除其中的某个元素x(若存在重复的数据,则删除第一个),实现上述功能的Python代码如下,运行界面如图所示。a=[17,10,13,1,9]print("原始数据为:",a)x

=

int(input("请输入待删除数:"))n=len(a)-1k

=

0for

i

in

range(①__________):

if②__________:

k=i

breakforiinrange(k,n):

③_______________

a=a[:n]print("删除后数据:",a)请回答下列问题:(1)请在画线处填入合适的代码。(2)若删除加框处的代码,则程序功能上的改变是___________________________________。

原始数据:[17,10,13,1,9]请输入待删除数:13删除后数据:[17,10,1,9]n+1a[i]==xa[i]=a[i+1]若有重复数据,删除的是最后一个数据【解析】本题考查数组数据的删除。(1)若要删除数组中间某个位置的数据,需要移动较多的数据(若删除数组末尾的数据,则不需要移动其他数据)。①由下文代码“k=i”可知,k应该是待删除数据x在数组a中的索引号,而n=len(a)-1,所以遍历的范围应该是0~n,故答案是n+1。②此处查找待删除数x在数组a中的索引号,故答案是a[i]==x。③此处是删除索引号为k的数据的核心代码,将k后面的数据依次往前覆盖,故代码是a[i]=a[i+1]。(2)若删除break语句,其他功能不变,但找到重复数据的最后一个索引号k,故删除的是最后一个数据。12.某农科院将试验田自左向右分为m块地(编号依次为0~m-1),每块地配置一个喷灌装置。灌溉系统定期测量所有地块的水量(非负整数),然后自左起地块开始检查:若某地块当前水量值小于1则开启喷灌:自身水量增加2、左右相邻地块水量各增加1,随后关闭喷灌装置;接着进行下去,直到m块地的水量均不小于1。(1)若m=12,灌溉系统某次测量中,编号0~11的各地块的水量值依次为0,0,1,2,1,0,1,0,2,1,1,0,则需开启喷灌装置的数量为__________。

4(2)模拟上述功能的部分Python程序如下,请在画线处填入合适的代码。whileTrue:

#定期测量编号为0~m-1的各块地的水量值,依次存入a[0]~a[m-1]

i=0

whilei<n:

if①__________:

#开启灌溉,代码略

ifi==0:

a[i+1]

+=1

elifi<n-1:

a[i-1]

+=1

a[i+1]

+=1

else:

a[i-1]

+=1

②__________________

#关闭喷灌装置,代码略

i=i+2

else:

③____________

a[i]==0a[i]=a[i]+2i=i+1【解析】本题考查基础python算法。(1)结合题意可知,从前向后遍历数组,遇到0时开启灌溉装置,数组有5个0,除了第2个0不会开启,其余都会,故4次。(2)

①依题意,当a[i]==0时开启灌溉。②在处理完左右相邻数据后,“自身水量增加2”,此处填a[i]=a[i]+2。③若开启灌溉装置,由于相邻数据都加了1,故可直接向右跳两步;若不开启,则向右跳一步,故答案是i=i+1。必备知识练1.(2024·浙江9+1联考)一个供销商有n批货,要卖给m位客户(n不.

一.

定.

大.

于.

m),虽然每一位客户出价均不相同,但供销商决定对每一批货设置相同的价格进行出售。出价的价格大于等于货物价格的客户将会买走货物。例如:供货商有5批货物,4位客户想要购买,他们出价分别为2,8,10,7,则供货商应该把价格设定为7,这样会有三位客户购买,自己的销售额为21。编写程序如下,输出货物标价,使供销商能够获得最大销售额。请在画线处填入合适的代码。#输入n,m

,并将每位客户的出价保存在列表a,代码略price=maxp=0for

i

in

range(m):

s=0

for

j

in

range(m):

if

a[i]<=a[j]:

①__________

ifs>=n:

②__________

ifs*a[i]>maxp:

maxp=s*a[i]

③_____________

print(price)s+=1s=nprice=a[i]【解析】本题考查枚举算法的理解与应用。每位客户的出价保存在列表a,要使得销售额最大化,供销商标价必为客户出价中的某一个。因此采用枚举算法,一一列举每一位客户的出价,再用循环遍历列表a,若出价大于等于标价,则购买者人数加1,因此①处代码为s+=1。若购买者人数超过货物数量,此时供不应求,只能按照货物数量,即变量n作为最大购买人数,因此②处代码为s=n。求最大值算法,由最后一句输出语句可知,price变量表示最终标价,则满足当前的人数乘以出价大于最大值时,更新标价price变量的值,因此③处代码为price=a[i]。2.(2023·浙江6月选考)某仓库有一排连续相邻的货位,编号依次为0~n-1,用于放置A、B两种类型的箱子,A型箱子占2个相邻货位,B型箱子占1个货位。编写程序,根据已完成的放置或搬离操作,输出空货位数及还可以放置A型箱子的最多数量(不移动已放置的箱子)。请回答下列问题:(1)若n为10,开始时货位全空,经过如图所示的放置或搬离操作后,不移动已放置箱子的情况下,还可放置A型箱子的最多数量为_____________个。

箱子类型BABAA操作类型放置放置放置放置搬离货位编号52.307.82.32或“两”(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#

读取货位总数,存入n,代码略cnt1

=

nlst

=

[0]*n

#

货位状态,0表示对应的货位为空while

True:

#

读取本次已操作的数据:箱子类型、操作类型、货位编号起始值,存入t、d和s,代码略

if

t

==

ˈAˈ:

w

=

2

①_______________________________________:

w=1

else:

#t不是ˈAˈ或ˈBˈ时退出循环

break

ifd==ˈPˈ:

#d为P时表示放置,否则表示搬离

②___________________________

else:

cnt1+=w

lst[s]=1-lst[s]elif

t==ˈBˈ

或elif

t==ˈˈBˈˈ或elif

(t==ˈBˈ)cnt1

-=w或cnt1=cnt1

w

ift==ˈAˈ:

lst[s+1]=1-lst[s+1]

i,cnt2=0,0

whilei<n-1:

iflst[i]==0andlst[i+1]==0:

③___________________

cnt2+=1

i+=1

print("当前空货位数:

ˈ,cnt1,ˈ,还可放置A型箱子的最多数量:

ˈ,cnt2)i+=1或i=i+1【解析】本题考查Python编程基础及解决实际问题的能力。(1)10个空位放置情况如下图所示:由于一个A型箱子要占2个相邻货位,因此最多可放2个A型箱子。(2)①从初始cnt1=n可以看出,cnt1是空货位数量。再根据if语句第一个分支:t=ˈAˈ时,w=2可知,当t=ˈBˈ时,搬离数量应为1,故此处填:elif

t==ˈBˈ。②d=ˈPˈ时表示放置,否则表示搬离。而搬离时cnt1+

=w,w变量为应搬离的数量,搬离时空位加w,则放置时空位减w,故此处填:cnt1-=w。③由代码可知,统计连续两个空位的个数,统计完后指针i要向后跳1,故此处填:i+=1。3.(2024·温州三模)某仓库记录每天出入库的情况,正数表示入库数量,负数表示出库数量。编写程序,查询出入库总量等于k的连续时间段。某星期出入库的情况为“10,-10,5,6,7,8,-5”,k值为18的连续时间段有第1天~第5天,第3天~第5天。请回答下列问题:(1)若将题干例子中的k值改为21,则有__________个时间段满足要求。

(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取出入库情况,存入列表a中,读取k值。代码略pos={0:[-1]};count

=0①__________

foriinrange(len(a)):

cur+=a[i]

②__________________

ifpreinpos:

forjinpos[pre]:

print("时间段:",j+2,"~",i+1)

③__________________________________

ifcurinpos:

pos[cur].append(i)

else:

pos[cur]=[i]print("一共有",count,"个时间段")3cur=0pre=cur-kcount+=1或count=count+1【解析】本题考查前缀和知识及其应用。(1)第4天~第6天6,7,8的累加和为21,连续时间段5,6,7,8,-5与10,-10,5,6,7,8,-5的累加和为21,因此共有3个时间段。(2)①从语句cur

+=a[i]来看,cur表示从索引位置0至i的累加和,需对cur赋初值为0。②从语句if

cur

in

pos:

来看,字典pos的键是累加和出现的位置,如果不在字典中,新增一个键值对,如果在字典中,将该位置添加到该键对应的位置中。从语句print("时间段:",j+2,"~",i+1)来看,是一段累加和的差值,即cur-pre的值为k,因此②处语句为pre=cur-k。③count表示符合条件的总数,当出现一段符合条件时,将进行计数处理。4.(2024·浙江县域联盟模拟)某平台在新书上架前会邀请10位专业评审与10位大众评审给新书进行打分,评分区间为[1,20],得分计算规则为将专业评审均分的60%与大众评审均分的40%求和并取整,再根据得分给出推荐等级,1分为“☆”,2分为“☆☆”,5分可以升级为“☽”,最高推荐等级为“☽☽☽☽”。进行统计时,若两组评审中任一组评审人数少于7人,则本轮打分无效。请回答下列问题:(1)某新书计算后得分为11分,则推荐等级为_______________(填写等级符号,从高到低排列)。

☽☽☆(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#读取各评审的打分,存入s,且无异常数据,如s=["A12","B20","B7","A6","B6"……],“A”表示专业评审,“B”表示大众评审,代码略fa=fb=ca=cb=0for

i

in

s:

①___________________________________

ifi[0]=="A":

fa+=int(x)

ca+=1

elifi[0]=="B":

fb+=int(x)

cb+=1if②______________________:

score=int(fa/ca*0.6+fb/cb*0.4)

x=score%5

③____________________________________

grade="☽"*y+"☆"*x

print("推荐度为:"+grade)else:

print("本轮评分需重新进行!")x=i[1:]或x=i[1::]或x=i[1:len(i)]ca>=7

and

cb>=7y=score//5

或其他等价表达式【解析】本题考查Python综合处理的相关知识。(1)已知5分是一个月亮,11分就有两个月亮和一个星星,故答案为:☽☽☆。(2)①根据代码中未知量为x,所以得出第①空是求x的值,结合题目意思,i遍历的是各评审的打分s,所以x取值取的是各位评审的分数,若是A评审则累加到fa中,B评审累加到fb中,所以可得出答案x=i[1:]。第②空考虑的方向是ca和cb变量的作用,题目中要求“若两组评审中任一组评审人数少于7人则本轮打分无效”,所以我们要判断打分是否有效,故答案为ca>=7

and

cb>=7,表示打分有效开始计算推荐度。这样第③空是要求解y的值,从x的值可以推断出是表示星星的个数,那么y的值则是月亮的个数,从x=score%5

中可以得出y月亮的求值大于等于5则升级,故答案为y=score//5。5.(2024·台州模拟)某路边有一排照明装饰灯,编号依次为1~n。现发现有多个装饰灯不亮,受维修成本的限制,只对其中的一部分进行维修,维修后保证有k个编号连续的装饰灯能够正常照明。编写程序,根据已损坏的装饰灯编号,输出最少需要维修的装饰灯的数量。请回答下列问题:(1)若路边有10个照明装饰灯(编号1~10),其中编号为1、4、8、10的装饰灯不亮,维修后需保证有6个编号连续的装饰灯能正常照明,则最少需要维修的装饰灯的数量是__________。

1(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。#

输入照明装饰灯的总数n、编号连续的正常照明装饰灯数量k,代码略#

读取不亮的装饰灯编号,存入d,代码略v

=

[0]

*

(n

1)c

=

[0]

*

(n

1)ans

=

nfor

i

in

①_________________:

v[d[i]]=1foriinrange(1,n+1):

c[i]=c[i-1]

+v[i]i=1whilei<=n-k+1:

last=②_____________

num=c[last]

-c[i-1]

if③_____________:

ans=num

i=i+1print(ans)range(len(d))i+k-1num<ans【解析】本题考查阅读理解代码,数学建模的能力。(1)要连续6个编号的灯正常,只需要维修4号灯即可,数量是1。(2)阅读代码可知,本题代码的算法为:统计连续k盏灯中,不亮灯的数量。其中的最小值就是最少需要维修灯的数量。熟悉前缀和算法,能更好地理解本题代码。列表v保存的是每个灯的状态,列表c保存的是从起始位置到当前位置所有坏灯的数量,对应数列中的ai和si。利用列表c可以快速得出区间和。i-j之间的坏灯数量:c[i]-c[j-1]。①根据代码,这里是遍历d列表下标:range(len(d))。②i开始连续k个,最后一个的下标:i+k-1。③比现有结果小才更新结果变量ans,条件:num

<

ans。6.(2024·衢丽湖11月联考)某公司举办抽奖活动,设有一、二、三等奖。每张奖券印有3个互不相同的数字,每次在兑奖前公布中奖号码,兑奖时不考虑中奖数字的先后顺序,兑奖规则如下表所示。编程统计奖券获得的总奖金。请回答下列问题:奖项一等奖二等奖三等奖

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论