试题详情
操作题 适中0.65 引用1 组卷10
若有这样一个四位数,其各位置上的数字的4次方之和等于它本身,则称这个数为四叶玫瑰花数。小吴想将所有的四叶玫瑰花数进行输出,编写Python程序,输出所有的四叶玫瑰花束。
(1)四位数1634________(选填:是/不是)四叶玫瑰数。
(2)实现上述功能的Python程序如下,请在划线处填入合适代码。
for i in range(1000,10000):   # ③

a = i // 1000

b = ______

c = i % 100 // 10

d = i % 10

if ______:

print(i)

(3)可以将③处的代码更改为下列哪些选项也能够实现相同的功能?_______

A.     B.     C.     D.

23-24高一下·浙江·期中
知识点:Python语言基础 答案解析 【答案】很抱歉,登录后才可免费查看答案和解析!
类题推荐
计算机运行多个任务(又称进程)时,需要进行调度。有的进程需要优先响应,例如用户的交互操作,此时就需要暂停当前运行的进程,让CPU先执行需要优先响应的进程,这称为抢占。操作系统需要设计调度算法,来决定CPU运行进程的顺序。
优先级抢占式调度算法是一种简单的调度算法,规则如下:
1)将进程分为m个优先级,设置m个等待队列,分别对应每一级优先级。
2)每个进程具有三个要素:到达时间,运行所需时长,优先级数(数越大优先级越高)
3)相同优先级的进程,按照先到先服务的原则依次执行。
4)同一时刻中,先将到达的进程都加入队列,再按照优先级进行分配
5)只有当k级队列为空的时候,才会为k-1级队列队首的进程分配时间。
6)进程Pi运行时,如果有优先级更高的进程Pj到达,则立即发生抢占,先执行Pj,并将进程Pi剩余未执行完的部分,重新加入Pi优先级对应的队列末尾,等待继续执行。
编写程序模拟CPU分配计算资源的过程,已知按照到达时间升序排序的进程数据(包含到达时间、运行时长、优先级),计算并输出每个进程最终处理完成的时间。(时间单位均为毫秒)
请回答下列问题:
(1)有4个进程A、B、C、D如表1所示。

进程

到达时间

运行时长

优先级

A

0

7

1

B

2

4

2

C

4

1

3

D

5

4

2

表1

由优先级抢占式调度算法的规则可知,0毫秒时进程A到达并执行;2毫秒时进程B到达,B的优先级高于A,发生抢占,A剩余的5毫秒回到队列1,B开始执行;4毫秒时进程C到达,C的优先级高于B,发生抢占,B剩余的2毫秒回到队列2,C开始执行;则进程D执行完的时刻为_______
(2)模拟实现优先级抢占式调度算法Python程序如下,请在划线处填入合适的代码。

def insert(p, remain):

data[p][2]=remain             #更新进程剩余的运行时间

lvl=data[p][3]                       #获取p进程的优先级

if queinfo[lvl][0]=-1:

queinfo[lvl][0]=p

if queinfo[lvl][1]!=-1:

data[queinfo[lvl][1]][-1]=p

queinfo[lvl][1]=p

m=int(input('设置优先级的数量m:'))

# 输入列表data存储进程,data中的节点包含信息有[名称,到达时间,运行时长,优先级],

代码略

# 进程已经按到达时间升序排序

#例如:data=[['A',0,7,1],['B',2,4,2],['C',4,1,3],['D',5,4,2]]

for i in range(len(data)):

data[i].append(-1)

queinfo=[[-1, -1] for i in range(m+1)]

insert(0, data[0][2])       #将第1个进程加入队列

time=data[0][1] 0

cnt=1       #所有队列内等待的进程总数

idx=1

lvl=m

while cnt>0:

if queinfo[lvl][0]!=-1:

cur=queinfo[lvl][0]               

queinfo[lvl][0]=data[queinfo[lvl][0]][-1]

cnt-=1

______

while idx < len(data) and time+data[cur][2]>=data[idx][1]:

if lvl >= data[idx][3] or time+data[cur][2]==data[idx][1]:

insert(idx, data[idx][2])

cnt+=1

idx +=1

elif time+data[cur][2]> data[idx][1]:

insert(idx, data[idx][2])       #抢占的进程也先入队

cnt +=1

inset(cur, ______)

cnt +=1

time=data[idx][1]

lvl =data[idx][3]

idx+=1

flag =True

break

if flag==False:

time = time+data[cur][2]

print("时刻", time, ":进程", data[cur][0], "完成")

lvl = m

if     ______       :       #仍然有未到达的进程等待入队

insert (idx, data[idx][2])

cnt +=1

time=data[idx][1]

idx += 1

else:

lvl-=1

if lvl==0:

lvl=m

(3)若将以上程序中insert函数内的加框处代码删除,会导致某些情况下无法得到符合程序功能的结果,下列4组数据中能测试出这一问题的是______(单选,填字母)

   

二叉树是每个结点最多有两个子树的树结构,如值为9的结点有两个子树6和8,值为6的结点有两个子树5和3。若设二叉树的深度为h,则除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。现要构造大根堆,堆是一棵顺序存储的完全二叉树,大根堆又是一种特殊的堆,它的特征是每个双亲结点的值都不小于其孩子结点的值。如下图所示,值为9的结点是6和8的双亲结点,而6和8分别是9的左孩子和右孩子;同理,6是5和3的双亲结点,而5和3分别是6的左孩子和右孩子……

假如我们1{J数组表示上述大根堆:

现有一算法把一个无序数组改造成大根堆。例如:我们在上图的大根堆中再增加一个值为8的新元素,如下图所示。

数组存储为:

具体操作方法如下:

第一步:因为a(10)大于它的双亲结点a(5),故需交换a(10)和a(5)的值;
数组存储为:
第二步:因为a(5)大于它的双亲结点a(2),故需交换a(5)和a(2)(t)值;

数组存储为:

第3步:因为a(2)不大于它的双亲结点a(1),故无需做交换操作。此时新元素已经放到了正确的位置,新的大根堆构造完成,上移行动结束。
(1)若在第16题图中增加值为4的新元素,则元素4将被存储在数组元素_________中。
(2)小段为此编制一VB程序:在文本框Tcxt1中输入结点个数n,单击命令按钮Command1,随机产生n个[1,99]的整数作为结点值,并由此构造大根堆,结果显示在列表框List1中,程序运行界面如图所示。

实现上述功能的程序代码如下。请在划线处填入合适的代码。
_________________
__________________
__________________

某银行网点有5个窗口,银行最少要保持3个窗口营业,另2个窗口初始为备用状态。客户按批次进入大厅,每个客户的业务办理时间为1个单位,银行每过1个时间单位就允许下一批客户进入。对于进入银行的客户,如果某窗口正空闲,则可上前办理业务,反之,若所有窗口均有客户,他便会排在最短的队伍后面。当平均每个营业窗口前的队伍人数大于等于7人时(队伍包括正在办理业务的客户在内),银行可临时将备用窗口中一个或两个改为营业窗口,当所有窗口平均客户少于7人时,将立即停用一个营业窗口转为备用,窗口平均人数若继续减少至以上情况,可再停止一个营业窗口,但最多只能有两个窗口为备用状态。
现模拟该银行排队程序,效果如下图所示,输出10个人各自的等待时间单位:

输出格式描述: (客户编号:等待的时间)
(1)实现上述功能的Python程序如下,请在划线处填入合适的代码。

mins=3       #常用窗口3个

maxs=5       #最多可开设5个窗口

lims=7       #正常服务时每个窗口平均等待的最多人数

tm=int(input("请输入客户共多少批: "))

ps= list(map(int ,input("输入每批客户人数"). split(",")))

# list(map(int,["1","2","3"]) )返回:[1, 2, 3]

sw= mins

if len(ps)! = tm:

print("输入有误! " )

pid, cnt=0,0

head, tail=0,0

qe=[[0,0]]* 1000       #创建等待队列

def updatetime(s):

for j in range( len(s)):

s[j][1]+= 1

for i in range(tm):

for j in range(sw):        #将轮到的人进行出队

if ________ :

print(f’({qe[ head][0]} :{qe[ head][1]})',end=")   #按格式出队输出

head += 1

cnt-=1

#人数减少后,检查人数和窗口数是否符合要求并按照要求减少窗口,代码略

if head!= tail:

________   #更新等待队列里每个人的等待时间

for j in range (ps[i]) :

pid+= 1

qe[tail]=[pid,0]

tail += 1

cnt += 1

while _________ :

sw += 1

while cnt>0:

#最后一批人进入银行后,程序只需要处理等待队列剩余人员到出队和窗口的减少,直至人数为0,代码略。

(2)共有3批客户,分别为22人、23人、21人,则输出结果中,第4个人等待时间单位是____

组卷网是一个信息分享及获取的平台,不能确保所有知识产权权属清晰,如您发现相关试题侵犯您的合法权益,请联系组卷网