中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

2025屆信息技術一輪復習練習:專題6 簡單算法及程序實現(含答案)

資源下載
  1. 二一教育資源

2025屆信息技術一輪復習練習:專題6 簡單算法及程序實現(含答案)

資源簡介

專題6 簡單算法及程序實現
知識點一 枚舉算法
1.在信息傳遞的過程中,通常會將一些敏感信息進行加密,以下是實現加密功能的Python程序段。
s=input(″明文:″)
p=″″;key=2
for ch in s:
if ″0″<=ch and ch<=″9″:
p+=str((int(ch)+key)%10)
else:
p=ch+p
print(″密文:″,p)
若輸入明文為“ym587”,則輸出密文為(  )
A.ym785 B.ym709
C.my709 D.my907
2.有如下Python程序段:
a=[7,4,9,4,3]
b=[0]*10
c=[0]*10
for i in a:
b[i]+=1
pa=0
for j in range(10):
for k in range(b[j]):
c[pa]=j
pa+=1
執行以上程序,數組c[0]至c[4]數據依次是(  )
A.7,9,4,4,3 B.3,4,4,7,9
C.4,4,7,9,3 D.9,7,4,4,3
3.有如下Python程序段:
a=[0]*10
s=″533774″
for i in s:
a[int(i)]=1
ans=0
n=0
i=9
while i>=0 and n<3:
if a[i]==1:
ans=ans*10+i
n+=1
i-=1
print(ans)
運行程序段后,顯示的內容是(  )
A.9876 B.754
C.775 D.7754
4.有如下Python程序段:
a=[10,63,50,56,26,73,48]
flag=True;key=50;min=0
for i in a:
if i>key:
if flag or i     min=i
     flag=False
print(min)
執行該程序段后,變量min的值是(  )
A.10 B.73
C.56 D.50
5.有如下Python程序段:
s=″CixiStudent ″
f=[0]*26;t=s[4:];i=0
while iif 'A'<=t[i]<=″Z″:
i+=1
continue
elif 'a'<=t[i]<=″z″ and f[ord(t[i])-ord('a')]==0:
f[ord(t[i])-ord('a')]=1
i+=1
for i in range(26):
if f[i]==1:
print(chr(i+ord('a')),end='')
運行以上程序段后,輸出的內容為(  )
A.dentu B.Student
C.tuden D.deintux
6.某小區停車場停車使用車位鎖,其中私家車車位,車主可將感應器插在私家車的USB電源接口上,感應器在30~50米內發出高頻信號(如圖 a),當私家車靠近,車位鎖自動降下解鎖,車離開(20 秒后)車位鎖自動升起上鎖。其余為收費車位,可掃描二維碼控制車位鎖并收費(如圖b)。
收費車位計費規則如下:停車時長不到半小時按2元計費;半小時及以上則按每小時5元計費;超過整小時部分,不足半小時的時長不計費,半小時及以上則按一小時計費。該停車場當日的停車記錄存儲在“parking.txt”文件中,文件內容如圖c所示,每一行共有4項數據,用逗號分隔,每項數據分別為進(出)場時間、車牌號、進出場狀態(0表示進場,1表示出場)、車位狀態(0表示私家車位,1表示收費車位)。小林編寫了Python程序,從該文本文件中讀取所有數據,并計算該停車場當日的總收入。請完成下列問題:
圖a私家車位
圖b收費車位
圖c
(1)私家車控制車位鎖需要安裝感應器,據題意,此感應器屬于________(單選,填字母:A.距離傳感器/B.無源電子標簽/C.有源電子標簽/D.紅外傳感器)。
(2)程序代碼如下所示,加框處代碼有錯誤,請改正。
(3)請將劃線處代碼補充完整。
def calT(Tin,Tout):
t1=int(Tin[11:13])* 60+int(Tin[14:16])
t2=int(Tout[11:13])* 60+int(Tout[14:16])
return t2-t1
f=open('parking.txt','r')
line=f.readline()
dic={}
price=5;total=0
while line: #當line非空(從文件讀取到了數據)
car=line.strip().split(',')
if car[2]=='0' and car[3]=='1':
dic[car[1]]=car[0]

T=①________
if T<30:
     fee=2
else:
     fee=②________
total=total+fee
line=f.readline()
f.close()
print(″本日停車費總收入為:″,total)
7.某搜索引擎網站一天的訪問日志數據如圖a所示,現要從中提取出訪問網站次數最多的IP。由于IP日志文件數據量非常大,我們可以把IP日志數據分別存儲到多個小文件中,分別統計出每個小文件中出現次數最多的IP地址及次數,再對各個小文件中的數據進行匯總。統計的結果如圖b所示。
(1)上述處理大數據的方法,采用的是________________思想。
(2)統計小文件中出現次數最多的IP地址的Python代碼如下,在劃線出補充合適的代碼,實現統計功能。
def showmax(ips): #統計出現次數最多的IP地址和出現次數
dic={}
maxn=0
for i in range(len(ips)):
if ips[i] in dic:
     dic[ips[i]]+=1
     if ①________:
       maxn=dic[ips[i]]
       maxIp=ips[i]
else:
     ②________
return maxIp,maxn
with open(″temp.log″,'r') as f: #讀取文件temp.log 中的IP地址
ips=[]
for line in f:
ip=line.split()[0]
ips.append(ip) #將IP地址逐行追加到列表ips中
③________ #調用showmax函數
print(″出現次數最多的 IP 是:″,a[0],″出現次數為:″,a[1])
8.先統計每個分數(0~100分)人數,再將全體學生按成績劃分ABCDE五個等級,各等級比例如下表所示,每個等級按比例乘以總人數取整,輸出各個等級最低分數線。
等級 A等 B等 C等 D等 E等
比例 15% 30% 30% 20% 5%
累計比例
思考:A等是分數最高的前0.15,若總人數為500人,則A等人數為多少?那么B等多少人呢?怎么計算?完成上面表格中人數的計算表達式?程序運行結果如圖所示。
等級A最低分數線是92,人數822,占比0.16 等級B最低分數線是75,人數1560,占比0.31 等級C最低分數線是60,人數1530,占比0.3 等級D最低分數線是51,人數912,占比0.18 等級E最低分數線是10,人數246,占比0.05
(1)實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
(2)程序中加框處代碼有錯,請改正。
#讀取學生成績到數組a中,代碼略
n=len(a)
b=[0]*101
c=[0]*102
dj=[0.15,0.30,0.30,0.20,0.05]
for i in a:
b[i]+=1
for i in range(100,1,-1):
①________
for i in range(1,len(dj)):
dj[i]=dj[i]+dj[i-1]
djfs=[0]*5
j=100
p=101
for i in range(len(djfs)):
while
j-=1
②________
print(″等級″+chr(65+i)+″最低分數線是″+str(j)+″,人數″+str(t)+″,占比″+str(round(t/n,2)))
p=③________
9.陳老師有一批文件需要上傳到校園服務器中,每個文件的信息包括文件名和文件大小,如表1所示,文件按文件名順序依次上傳。已知該服務器有n條通道,可同時傳輸n個文件,每條通道一次只能傳輸一個文件。若有通道傳輸完成,剩余文件按照文件名順序進入該通道。例如:當n為3時,可同時傳輸3個文件,如表2所示;由表2可知,通道2最先完成,則文件4進入通道2上傳,如表3所示。
表1 文件信息表
文件名 文件大小(單位:MB)
文件1 5
文件2 1.8
文件3 3.7
文件4 31
文件5 3.4
文件6 121
文件7 2
文件8 47
文件9 3.2
文件10 34
表2 通道傳輸數據表
傳輸通道 文件名 累計傳輸數據量(單位:MB)
通道1 文件1 5
通道2 文件2 1.8
通道3 文件3 3.7
表3 通道傳輸數據表
傳輸通道 文件名 累計傳輸數據量(單位:MB)
通道1 文件1 5
通道2 文件4 1.8+31
通道3 文件3 3.7
所有文件信息存儲在“upload.xlsx”文件中,編寫Python程序,實現按照傳輸完成順序依次輸出文件名和每個通道的累計傳輸數據量,請回答下列問題。
(1)文件信息如表1所示,若n=3,則通道1累計傳輸的數據量為________MB。
(2)請在劃線處填入合適的代碼。
import pandas as pd
def minload(upload): #計算n個傳輸通道中累計傳輸文件最小的通道
t=0
for i in range(1,n):
if upload[i][1]    ①________
return t
df=pd.read_excel(″upload.xlsx″)
file=df.values.tolist() #將df轉換成二維列表file,根據表1所示,file[0]的值為[″文件1″,5]
n=int(input(″輸入通道數n=″))
upload=[[″″,0] for i in range(n)] #存儲傳輸通道中的文件名和累計傳輸數據量
finish=[]
for i in range(len(file)):
if ②________:
upload[i][0]=file[i][0]
upload[i][1]=file[i][1]
else:
t=minload(upload) #獲取傳輸通道中最先完成傳輸的通道編號
finish.append(upload[t][0])
upload[t][0]=file[i][0]
③________
for i in range(n): #將各通道中最后傳輸的文件名加入輸出列表中
mini=0
for j in range(n):
if upload[j][1]     mini=j
finish.append(upload[mini][0])
upload[mini][0]=″″
print(finish)
for i in range(n):#輸出每個通道累計傳輸數據量
print(″通道″,i+1,″的累計傳輸數據量為:″,upload[i][1])
10.搶紅包游戲:微信搶紅包游戲成為了一代人的經典回憶,游戲將總金額為n的“紅包”隨機分配給m個玩家,紅包的分配需同時滿足以下規則:①所有人搶到的金額總和跟總金額n相等;②每個人至少搶到1分錢;③每個人搶到的金額隨機;④每個人搶到金額大小的概率平等。
滿足以上規則的最簡單算法可描述為:假設總金額為n元,為使問題簡單化,將總金額乘以100,此時的單位為分,使得問題在整數范圍內解決。假設分發給m個人,則只需在[1,100*(n-1)]長度的范圍內隨機生成m-1個不重復的點,這些點將長為100*n的線段劃分為m個段,每一段長度即可表示紅包金額,再將每一段長度數據除以100換算為單位(元)輸出。程序運行的結果如圖所示:
輸入紅包金額:100 輸入紅包數量:5 紅包金額:54.4,11.59,28.09,4.09,1.84 手氣最佳:54.4
實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
import random
n=int(input(″輸入紅包金額:″))*100
m=int(input(″輸入紅包數量:″))
if m>n:
print(″游戲無法繼續,結束!″)
else:
f=[False]*(n+1)
for i in range (①________):
t=random.randint(1,n-1)
while f[t]:
     t=random.randint(1,n-1)
f[t]=True
②________
p=0
amax=0
s=″″
for i in range(1,n+1):
if f[i]:
    ③________
     s+=str(red/100)+″,″
     if red>amax:
       amax=red
     p=i
print(″紅包金額:″+s[:-1])
print(″手氣最佳:″+str(amax/100))
知識點二 在一個序列中遍歷元素
1.小明想要在數字串s中尋找連續數字之和為k的子串,若有多個子串符合,則輸出第一個子串。例如,s=″20220520″,k=7,則符合要求的子串為″205″。實現該功能的部分python代碼如下:
i=0;j=0;sum=0
for j in range(len(s)):
sum+=int(s[j])
while sum>k:
c=s[i]
①________
i+=1
if sum==k:
print(″符合要求的子串為:″,②________)
break
劃線①②處的語句是(  )
A.①sum=sum+int(c)  ②s[i:j+1]
B.①sum=sum-int(c) ②s[i-1:j+1]
C.①sum=sum+int(c) ②s[i:j]
D.①sum=sum-int(c) ②s[i:j+1]
2.有如下Python程序段:
s=input('請輸入數據:')
t=s[0]
maxt=0
for i in range(1,len(s)):
if s[i]>s[i-1]:
t+=s[i]
if len(t)>maxt:
     maxt=len(t)
    ans=t
else:
t=s[i]
print(ans)
執行該程序段后,輸入“12123234561”,輸出的內容是(  )
A.23456 B.12123
C.34561 D.1212323
3.現有一個文檔“壓縮前.txt”中保存了大量的小寫字母和數字,小明發現文檔中有很多字母或數字是連續的,就想設計一個算法將字符串中連續的字母或數字進行壓縮,如連續字符“abcd”可壓縮為“a-d”,不連續的字符維持原狀,例如,字符串“abcde1255hij”可壓縮為“a-e1-255h-j”,并將壓縮后的結果輸出保存到“壓縮后.txt”中。
該算法的部分Python代碼如下:
def writedata(data):
#將數據data輸入到″壓縮后.txt″中,代碼略
fp=open(″壓縮前.txt″)
lines=fp.readlines()
fp.close()
for line in lines:
flag=False
ans=″″
for i in range(len(line)-1):
if :
     ans+=line[i]+″-″
     flag=True
elif ord(line[i+1])!=ord(line[i])+1:
     ①________
     flag=False
ans+=line[i+1]
②________
(1)執行程序后,當輸入字符串s的值為″efg1234345hijk″時,壓縮后的字符串為________。
(2)請在劃線處填入合適的代碼。
(3)程序中加框處代碼有誤,請改正。
4.在一個包含數字和其他非數字字符混合的原始數據中,提取其中的連續數字,當數據中存在多個數字串,以“,”間隔不同數字串。如字符串China86USA1HK852中包含86,1,852三個數字串。
實現該功能的程序代碼如下,請將空白處填寫完整。
s=″China86USA1HK852″
ans=″″;flag=False
for i in s:
if ①________:
ans+=i
②________
③________:
ans+=″,″
flag=False
print(″提取的數字有:″+ans)
5.輸入一個1~99999之間正整數金額,轉換成相應的大寫人民幣形式,處理的方式:
1)人民幣大寫形式分″零壹貳叁肆伍陸柒捌玖″共10個數字和″拾佰仟萬″4個單位。
2)從左向右向后處理每一位數字,同時讀取該位數后面的一個數字。對當前數字分0和非0兩個情況進行處理,若當前位為0,不加″拾佰仟萬″等單位,如102轉換為壹佰零貳元。
3)最后一位數單獨處理,若為0,直接在轉換后的字符串后加上“元”,否則加上對應的大寫數字和文字“元”。
實現該功能的程序代碼如下,請將空白處填寫完整。
sn=″零壹貳叁肆伍陸柒捌玖拾佰仟萬″
s=input(″輸入一個大于0但小于10萬的正整數:″)
ans=″″
for i in ①________:
t1=int(s[i])
t2=int(s[i+1])
if t1!=0:
jedx=sn[len(s)-2+10-i]
ans+=sn[t1]+ jedx
②________:
ans+=sn[0]
③________
if t1!=0:
ans+=sn[t1]
print(″轉換的大寫形式為:″+ans+″元″)
6.有n個人,其能力值依次存儲在數組a中,若要從這些人中找出連續k個人,且要求這些人的能力之和最大。算法描述如下:
1)依次對每個人但不包含自己的前面所有人能力進行求和。
2)從前往后依次找出n個人一段的差值,該差值就是這n個人的和。
如數列1,3,2,5,6,對應的和依次為0,1,4,6,11,17,3人一組,依次為6,10,13。
程序運行的結果如圖示:
(1)若a中能力值依次為7,4,9,4,8,要找出3人一組,則最高平均得分為________。
(2)實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
a=[7,4,9,4,14,4,19,24,34,19,44,34,9,4,34,39,4,3]
k=int(input(″請輸入人數:″))
n=len(a)
b=[0]*(n+1)
for i in range(n): #b[i]存儲第i個人(不包含第i個人)前面所有人能力之和。
b[i+1]=①________
amax=0;p=-1
for i in range(②________):
t=③________
if t>amax:
amax=t
p=i
print(″平均得分最高的為″,round(amax/k,1),″開始號碼是:″,str(p+1))
7.在一個整數序列中,由若干個連續的數據元素組成的序列,稱為該序列的子串。現輸入一個整數序列和一個整數m,尋找一個滿足下列條件的子串:
1)該子串的各元素之和不能超過m。
2)在所有滿足條件1)的子串中尋找長度為最大(元素個數最多找出最右邊)的子序列。
例如,整數序列為″3,1,5,8,1″,m的值為10,從右邊開始,將他后面的數進行累加,得到序列18,15,14,9,1。用兩個數進行相減可以得到9-0和18-9符合小于10的條件。程序運行的結果如圖所示:
輸入不能超過的閾值:30 最長的子序列長度為:6 符合條件的最長子序列為:5,4,2,13,1,5
(1)實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
(2)程序中加框處代碼有錯,請改正。
#讀取序列中數值,保存到數組d中,并輸出,代碼略。
m=int(input(″輸入不能超過的閥值:″))
ssum=[0]*(n+1)
for i in range(①________,-1,-1):
ssum[i]=ssum[i+1]+d[i]
maxn=0
maxposi=-1
for i in range(n-1,0,-1):
j=i-1
while j>=0 and ②________:
j-=1
if i-j>maxn:
maxn=i-j
  
print(″最長的子序列長度為:″,str(maxn))
ans=″符合條件的最長子序列為:″
for i in range(③________):
ans+=str(d[i])+″,″
print(ans[:-1])
8.某數據壓縮方法描述如下:
①原始數據中,某數不為0且相鄰無重復,壓縮數據用該數據表示;②原始數據中,某數為0且相鄰無重復,壓縮數據用兩個數表示,第1個為0,第2個為0;③原始數據中,某數據相鄰有重復,壓縮數據用3個數表示:第1個為0,第2個為重復數的個數,第3個為該數本身。
根據上述壓縮方法,對應的解壓縮方法示例如圖所示。
壓縮前的代碼存儲在″壓縮數據.txt″文件中,每兩個壓縮數據間用逗號分隔。編寫該文件每行的數據解壓縮的Python程序代碼。
(1)如果壓縮數據為“23,0,21,66,0,0,77,0,5,0”,則解壓縮數據的個數是________。
(2)實現上述功能的Python程序如下。請在劃線處填入合適代碼。
def jy(a):
s=″″
i=0
while iif a[i]==″0″:
     if ①________:
       s+=″0″+″,″
       i+=2
     else:
       for j in range(int(a[i+1])):
         s+=a[i+2]+″,″
       ②________
else:
     s+=a[i]+″,″
     i+=1
return s[:-1]
f=open(″壓縮數據.txt″,″r″,encoding=″utf-8″)
for i in f:
s1=i.split(″,\n″)
③________
print(s2)
9.正常單詞不會有連續2個以上相同的字母,如果出現連續3個以上的字母,那么這是一個抽搐詞。給出該單詞,從左到右求出所有抽搐詞字母的起始點和結束點。如輸入字符串“whaaaaatttsup”輸出為“3-7,8-10,”,輸入“whoooisssbestttt”輸出為“3-5,7-9,13-16”。
程序代碼如下所示,請回答下列問題。
(1)若將字符串“schhhoolhommeeee”作為輸入單詞,則按以下代碼執行后的輸出為________。
(2)在劃線處填上合適的代碼。
s=input(″請輸入一個單詞:″)
n=①________
c=s[0];k=1
for i in range(1,n):
if c==s[i]:
k+=1
else:
if k>=3:
     print(str(i-k+1)+″-″+str(i),end=″,″)
k=1
②________
if k>=3:
print(str(i-k+2)+″-″+str(i+1))
10.創意機器人大賽——撿硬幣。比賽規則如下:
(1)在比賽場地上放置了n個硬幣,每個硬幣的位置均不相同,各位置坐標(x,y)保存在文本文件中(如圖a所示,放置了5個硬幣,文本中坐標按x,y升序排列);
(2)機器人在兩個硬幣位置間走直線,從起點(0,0)出發,按硬幣x坐標從小到大去撿,若x坐標相同,則按y坐標從小到大撿;取走其中的n-1個硬幣,總行走距離最短的機器人將獲得比賽的冠軍。
例:如圖a所示,p2直接到p4則代表p3處硬幣未取。
完成該項目分以下幾個步驟:
(1)讀取坐標數據。
從文本文件中讀取硬幣的坐標(x、y),分別存儲在列表x和y中。請在劃線處填入合適的代碼。
f=open(″position.txt″,'r') #從文件中讀取坐標位置
x=[0];y=[0] #將原點坐標分別存儲在x、y列表中
line=f.readline() #取出一行數據
#從文本文件中讀取硬幣的位置,并存儲在x、y列表中
while line:
data=line.split(″,″) #以逗號為分隔符轉換成列表
x.append(int(data[0]))
①________
line=f.readline()
f.close()
(2)編寫函數,計算兩點間的距離。請在劃線處填入合適的代碼。
from math import sqrt
def dist(x1,y1,x2,y2): #計算(x1,y1)到(x2,y2)的距離
d=②________
return d
(3)設計算法與程序實現。
機器人取走n-1個硬幣經過的最短距離公式可以描述為:
其中:為機器人取走n-1個硬幣走的最短距離;為機器人取走n個硬幣經過的距離之和;為機器人未取第i個硬幣少走的路程;Max為求中的最大值。
根據上述算法編寫的Python程序如下,請在劃線處填入合適的代碼。
n=len(x);long=0
for i in range(1,n):
long=long+dist(x[i-1],y[i-1],x[i],y[i])
ansi=n-1
for i in range(2,n):
d1=dist(x[i-2],y[i-2],x[i-1],y[i-1])
d2=dist(x[i-1],y[i-1],x[i],y[i])
d3=dist(x[i-2],y[i-2],x[i],y[i])
dx=③________ #計算未取第i-1 個硬幣少走的路程。
if dx>maxd:
maxd=dx
ansi=i-1
print(″機器人行走的最短距離為:″+str(round(④________,4)))
print(″未取走的硬幣的位置為:(″,x[ansi],″,″,y[ansi],″)″)
(4)調試和異常處理。
當最后一個硬幣未取為最短距離時,上述程序運行結果不正確。加框處代碼有誤,請修改。
11.根據2012年出臺的氣象行業標準,滑動平均氣溫可以作為入春的劃分指標。滑動平均氣溫值是以當天和前4天這5個日平均氣溫數據為一組求取的平均值,當滑動平均氣溫值連續5天大于等于10 ℃且小于22 ℃,才算入春。
從計算這5個滑動平均氣溫值所對應的9天日平均氣溫數據中,選取第一個大于等于10 ℃且小于22 ℃的日期,作為春季起始日。小明收集了3~4月份的部分氣溫數據,編寫Python程序確定入春時間。請回答下列問題。
(1)若3月8日起的天氣數據如下表所示,根據滑動平均氣溫標準,春季起始日為________號。
日期 8 9 10 11 12 13 14 15 16 17 18 …
日平均 氣溫 7.5 9.5 12.5 9 12 11 13.5 10.5 10 7 7.5 …
滑動平 均氣溫 6.1 5.7 7.2 8.7 10.1 10.8 11.6 11.2 11.4 10.4 9.7 …
(2)編寫Python程序,讀取某段時間內的溫度數據,判斷是否入春,輸出結果如圖所示。實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
wd=[[″3月1日″,10,4],
[″3月2日″,15,4],
………………
[″4月3日″,11,9],
[″4月4日″,14,10]] #列表wd存儲日期及每日的最高、最低氣溫
a=[7,9.5,8,9.5] #列表a存儲日平均氣溫,已保存前4天數據
b=[8.2,7.7,7.5,8.2] #列表b存儲滑動平均氣溫,已保存前4天數據
n=0
he=34 #變量he已保存前4天(1至4號)日均氣溫之和
for i in range(4,len(wd)): #從第 5 天開始計算
a.append((wd[i][1]+wd[i][2])/2)
he+=a[i]
b.append(he/5)
①________
i=0
flag=True
while ifor j in range(i,i+5):
if b[j]<10 or b[j]>=22:
     break #跳出當前循環
else:
for x in range(i-4,i+5):
     if 10<=a[x]<22:
       print(②________+″入春″)
       flag=False
       break
i=i+1
if ③________:
print(″還未入春″)
12.一個整數序列,如果兩個相鄰元素的差恰好正負(負正)交替出現,則稱為該序列為搖擺序列。小王同學想求出某個數列的最長搖擺子序列。以序列[3,14,7,6,9,12,10,8,13,5]為例,整體不是搖擺序列,但子序列[3,14,7,9]、[3,14,6,12]等都屬于搖擺子序列,其中最長的搖擺子序列是[3,14,6,12,8,13,5]。根據圖a分析得知,當序列有一段連續的遞增(或遞減)時,可形成搖擺子序列,我們只需要找到每一次轉折中的拐點元素。小王編寫了一個Python程序實現該功能:程序運行時,輸入一串用逗號分隔和結束的數字,可以得到最長搖擺序列的長度,以及具體的序列。程序運行界面如圖所示:
請輸入以逗號分隔和結束的數據(不超過20個數):3,14,7,6,9,12,10,8,13,
最長搖擺子序列為:6
最長搖擺子序列為:3,14,6,12,8,13
(1)若輸入數據“2,4,5,3,2,1”,則最長搖擺子序列為________。
(2)實現上述功能的Python代碼如下,請在劃線處填入合適的代碼。
s=input(″請輸入以逗號分隔和結束的數據(不超過20個數):″)
a=[0]*20;b=[False]*20;flag,n,i,t,ans=0,0,0,'',''
def f(n):
f=1
global ans #global表示此處的ans就是全局變量ans
ans=str(a[n-1])
for i in range(n-2,-1,-1):
if b[i]:
     f=f+1
     ①________
return f
for ch in s:
if ch==″,″:
a[i]=int(t);n+=1;i+=1;t=''
else:
t=t+ch
for i in range(1,n):
gd=True
if flag==0:
if a[i]>a[i-1]:
     flag=1
elif a[i]     flag=2
else:
    gd=False
elif flag==1 and a[i]flag=2
elif ②________:
flag=1
else:
gd=False
③________
if f(n)<3:
print(″不構成搖擺子序列″)
else:
print(″最長搖擺子序列長度為″,str(f(n)))
print(″最長搖擺子序列為:″,ans)
13.為了讓乘客實時掌握公交到站時間,提高乘客的出行體驗,某公交公司開發了一款小程序,其主要功能有:乘客輸入當前時刻和上下站點序號,可以查詢到最近到達班次、候車時間及預計乘車時間。某線路的部分發車信息存儲在文件″gj.csv″中時刻表如表所示:
站點序號 班次1 班次2 班次3 班次4 班次5
1 7:20 8:00 8:30 9:00 9:30
2 7:24 8:06 8:38 9:05 9:38
3 7:28 8:13 8:48 9:15 9:44
4 7:32 8:15 8:54 9:20 9:50
5 7:35 8:17 9:00 9:24 10:00
6 7:37 8:20 9:05 9:28 10:17
7 7:40 8:24 9:13 9:30 10:25
8 7:43 8:28 9:18 9:40 10:35
9 7:50 8:30 9:25 9:43 10:55
10 8:00 8:40 9:40 10:00 11:09
程序運行效果如圖所示:
乘客您好!請輸入當前時刻:7:21 請輸入上車站點:2 請輸入下車站點:8 最近到站的公交為第1班次,候車時間為3分鐘,預計您的乘車用時為19分鐘。
(1)如果當前時刻是9:18,從站點4上車,站點10下車,預計乘車用時為________分鐘。
(2)實現上述功能的部分程序如下,請在劃線處填上合適的代碼。
import csv
f=open(″gj.csv″,″r″)
f_csv=csv.reader(f)
time=[]
for row in f_csv:
time.append(row)
def change(times): #轉換時間的單位為分鐘,參數 times 如“6:00”
#times.split(':')表示將字符串 times 按照':'進行分割,返回結果為列表
hours=times.split(':')[0]
minutes=times.split(':')[1]
res=①________
return res
for i in range(1,len(time)): #將公交時間表中的時刻統一轉為分鐘單位
for j in range(1,len(time[i])):
time[i][j]=change(time[i][j])
now=change(input(″乘客您好!請輸入當前時刻:″))
p1=int(input(″請輸入上車站點:″))
p2=int(input(″請輸入下車站點:″))
n=len(time[0])-1
min=time[p1][1]-now
k=1
for i in range(②________):
if time[p1][i]-nowmin=time[p1][i]-now
k=i
tot=④________
print( ″最近到站的公交為第″+str(k)+″班次,候車時間為″+str(min)+″分鐘,預計您的乘車用時為 ″+str(tot)+″分鐘。″)
知識點三 組合問題
1.有如下Python程序段:
a=[3,6,4,1,2,5]
n=len(a)
f=[False]*n;p=[0]*6
for i in range(6):
k=0
for j in range(1,n):
if f[j]==False:
     if f[k]==True or a[j]>a[k]:
       k=j
p[i]=k
f[k]=True
程序執行后,列表p的值依次是(  )
A.[0,1,2,3,4,5] B.[5,4,3,2,1,0]
C.[1,5,2,0,4,3] D.[4,0,2,5,4,1]
2.有如下Python程序段:
#生成6個隨機整數,存入列表元素a[0]到a[5]中,代碼略
b=[0]*6
for i in range(1,6):
for j in range(i):
if a[i]>a[j]:
     b[i]+=1
print(sum(b)) #計算并輸出數列b中所有元素之和
執行該程序段后,輸出的結果是6,則a[0]到a[5]各元素值可能的是(  )
A.10,17,33,28,49,30 B.14,36,21,37,11,19
C.46,33,50,47,13,34 D.33,24,34,11,31,43
3.有如下Python程序段:
s=[″56″,″174″,″81″,″213″,″143″,″9″]
m=[1]*len(s)
for i in range(len(s)):
for j in range(len(s)):
if s[i]     m[i]+=1
print(m[2])
執行程序后,輸出的結果為(  )
A.2 B.1 C.3 D.4
4.哥德巴赫猜想是近代三大數學難題之一,即任一大于2的偶數,都可表示成兩個素數之和。采用Python驗證100以內哥德巴赫猜想的正確性,則劃線處的代碼為: (  )
import math
def isprime(num):
i=2
while i<=int(math.sqrt(num)):
if num % i==0:
     return False
i+=1
return True
n=6
while n<=100:
for j in range(3,int(n/2)):
if____(1)____:
     print (n,″=″,j,″+″,n-j)
n+=2
A.isprime(j) and isprime(n-j)
B.isprime(j) and isprime(j+1)
C.isprime(n) and isprime(j)
D.isprime(j) and isprime(j-1)
5.小溫用Python編寫一個統計學生選考科目的程序,用于檢查每位學生選課組合是否有效(選課組合為3門且不重復),并對有效選擇結果統計每個科目的選課人數及選課率(選課率=選考人數/選課有效總人數)。學生選課信息存儲在choose.txt文件中,其中subject列的數據為學生的選課科目數據,均以科目代碼顯示。科目名稱與科目代碼的對應關系如下表:
科目名稱 物理 化學 生物 政治 歷史 地理 技術
科目代碼 0 1 2 3 4 5 6
choose.txt文件的部分界面及程序運行結果分別如圖a、圖b所示。
(1)文件choose.txt中的數據為________(單選,填字母:A.結構化數據/B.半結構化數據/C.非結構化數據。)
(2)請在劃線處填入合適代碼。
def check(x): #檢測選課組合是否有效
flag=False
sum,lista=0,[0]*7
if len(x)==3:
for i in range(3):
     if ″0″<=x[i]<=″6″:
       lista[int(x[i])]=1
for i in range(7):
     sum+=lista[i]
     if①________:
       flag=True
return flag
dict={0:″物理″,1:″化學″,2:″生物″,3:″政治″,4:″歷史″,5:″地理″,6:″技術″}
f=open(″choose.txt″,″r″)
line=f.readline()
num,listn=0,[0]*7
while line !=″″:
listb=line.strip().split(″,″)
s=listb[3]
if check(s):
for i in range(3):
     listn[int(s[i])]=②________
num+=1
line=f.readline()
f.close()
print(″科目″,″人數″,″選課率″)
for i in range(7):
③________
print(dict[i],″{:<4d}″.format(listn[i]),″{:.2%}″.format(k)) #″{:<4d}″.format(listn[i])作用為將listn[i]左對齊輸出(寬度為4)
#″{:.2%}″.format(k)作用為將k以百分比格式輸出(保留2位小數)
6.某市要組織高中生參加競技比賽。現要求在報名的n名學生中挑選出身高大于等于175 cm的學生,被挑選出的學生兩兩組隊,且隊內兩名成員的體重之和不能超過140公斤,找出最多的組合數量。(提示:在符合身高要求下,按體重降序排列,體重最大的和體重最輕的組合,達到組合數量最多。)
實現上述功能的Python程序如下,請在劃線處填上合適的代碼。
#將學生的姓名,身高和體重依次存儲到數組a中,代碼略
n=len(a)
for i in range(n-1):
for j in range(n-1,i,-1):
if a[j][2]>a[j-1][2] and (a[j][1]>=175 and a[j-1][1]>=175):
    a[j],a[j-1]=a[j-1],a[j]
elif ①________:
     a[j],a[j-1]=a[j-1],a[j]
if a[i][1]<175:
nlen=②________
break
i=0;j=nlen
while iif a[i][2]+a[j][2]<=140:
print(a[i],a[j])
i+=1
j-=1
else:
③________
7.公因數只有1的兩個非零自然數,叫做互質自然數。王老師編寫了一個Python程序,程序的功能是隨機產生5個1到20之間的整數,找出其中和最大的互質數對。程序運行界面如圖所示:
實現該功能的程序代碼如下:
import random
def gcd(a,b): #gcd函數的作用是求a和b的最大公因子
while a%b !=0:
a,b=b,a%b
return b
a=[]
for i in range(5):
a.append(①________)
print(″產生的 5 個隨機數是:″,a)
max=0 ;result=″″
for i in range(len(a)):
for j in range(i+1,len(a)):
if ②________and a[i]+a[j]>max:
     max=a[i]+a[j]
     result=str(a[i])+″ ″+str(a[j])
if result !=″″:
print(″最大的互質數對是:″,result)
else:
print(″找不到互質數對″)
請回答下列問題:
(1)尋找互質數對的算法屬于________(選填:枚舉/解析)算法。
(2)如產生的5個隨機數是[20,16,12,6,14],則程序輸出內容是________。
(3)要實現程序的功能,請完善劃線處的代碼。
8.小明編寫一個Python程序,實現找到字符串s1和s2中相同的最長子串s,并定位子串在字符串s2中出現的位置,運行結果如圖所示。
s1:Python s2:thanks thanks thanks 最長共同子串:th 子串出現位置: 0/7/14/
(1)如輸入s1和s2分別為“hello”和“hi”(不含引號),輸出最長共同子串是________。
(2)定義longstr函數,功能是找到字符串s1和s2中相同的最長子串,請在劃線處填入合適的代碼。
def longstr(s1,s2):
m=[[0]*(1+len(s2)) for i in range(1+len(s1))]
t,h=0,0
for i in range(1,1+len(s1)):
for j in range(1,1+len(s2)):
    if ①________:
       m[i][j]=m[i-1][j-1]+1
       if m[i][j]>t:
         t=m[i][j]
         ②________
     else:
       m[i][j]=0
return s1[h-t:h]
(3)定義pos函數,功能是定位子串在字符串s2中出現的位置,請在劃線處填入合適的代碼。
def pos(st,s2):
print(″子串出現位置:″)
start=0
if len(st)>0:
while True:
     start=s2.find(st,start) #返回字符串 s2 中子串 st 出現的首字符索引,從索引 start 開始找,若找不到,則輸出-1
     if start==-1:
       break
     print(start,end=″/″)
     ______________
(4)主程序,請在劃線處填入合適的代碼。
s1=input(″s1:″)
s2=input(″s2:″)
s=____________
print(″最長共同子串:″,s)
pos(s,s2)
綜合題 簡單算法
1.用英文字母A~D對數字字符0~9進行編碼,規則如表所示:
數字字符 0 1 … 7 8 9
二進制值 0 0 0 0 0 0 0 1 … 0 1 1 1 1 0 0 0 1 0 0 1
十進制值 0 0 0 1 … 1 3 2 0 2 1
對應編碼 A A A B … B D C A C B
(1)輸入等加密的數字串為74,則輸出的加密結果為________。
(2)實現上述功能的部分 Python 程序如下,請在劃線處填入合適的代碼。
code=″ABCD″
s=input(″輸入待加密的數字串:″)
ans=″″
flag=True
for x in s:
if ①________:
t=int(x)
②________
t2=t%4
ans+=code[t1]+code[t2]
else:
③________
if flag:
print(″加密后的結果:″+ans)
else:
print(″輸入非法數字!″)
2.數據在網絡傳輸中,帶寬是寶貴的資源,通過壓縮傳輸的字符串,可以減少數據量,從而加快傳輸速度,節省帶寬資源。現有一種字符壓縮方法描述如下:對于連續的若干個相同的子串“X”會壓縮為“[DX]”的形式(D是一個整數且1≤D≤99),如字符串“ABABABAB”就壓縮為“[4AB]”或者“[2[2AB]]”,類似于后面這種壓縮之后再壓縮的稱為二重壓縮。如果是“[2[2[2AB]]]”則是三重的。現給出一串壓縮后的結果,并對其進行解壓縮。
思路:先找出每個左括號的位置,然后從后往前枚舉,找出每一個括號內要解壓的子串以及要解壓的次數,將子串解壓后得到一個新串,重復操作,得到最終的解壓縮結果。
例如:[2[2[2AB]]]→[2[2ABAB]]→[2ABABABAB]→ABABABABABABABAB。
(1)已知采用上述壓縮方法得到的壓縮結果是“[2Z[2DB]]”,則解壓縮結果為________。
(2)根據上述描述,小明利用Python設計了一個解壓縮程序,請在劃線處填入合適的代碼。
start=[]
s=input(″請輸入壓縮結果:″)
for i in range(len(s)):
if s[i]==″[″:
start.append(i)
for i in range(len(start)-1,-1,-1):
num=0;temp=″″
①________
while jif ″0″<=s[j]<=″9″:
     num=num*10+int(s[j])
else:
     ②________
j+=1
ans=num*temp
s=s[:start[i]]+③________ #重新構造字符串
print(″解壓結果為:″+s)
3.騰訊通過QQ等級來衡量用戶的活躍情況。QQ等級計算規則如下:
①用戶當天在線兩個小時,記為活躍1天;半小時及以上、兩小時以下則記為活躍0.5天。
②根據累計活躍天數對應不同QQ等級,如表所示,0級至1級需活躍5天,1級至2級需活躍7天,依此類推。
③每升1級,用戶可以獲取1個△,4個△兌換1個◇,4個◇兌換1個○,4個○兌換1個☆。
級別 圖標 累計活躍天數
0級 0天
1級 △ 5天
2級 △△ 12天
3級 △△△ 21天
4級 ◇ 32天
5級 ◇△ 45天
(1)小張的QQ等級圖標為○◇◇◇△△,則小張QQ等級的級別是________。
(2)“log.txt”文件中逐行記錄了某位用戶每天的在線時長(以小時為單位),編程實現讀取文件內容并計算,按☆○◇△的順序輸出用戶的QQ等級圖標,請在劃線處填入合適的代碼。
f=open('log.txt')
data=[]
active=0
icon=[″☆″,″○″,″◇″,″△″]
#逐行讀取'log.txt'文件中的數據,依次添加到data列表中,如data=[1.9,2.3,11.5,3.1,2.8,5.2……]代碼略
#計算用戶的活躍天數
for i in range(len(data)):
if data[i] >=2:
active +=1
elif data[i] >=0.5:
    ①________
#計算用戶等級
base=5
level=0
while active >=base:
level +=1
②________
base=base + 2
#將等級換算為圖標
s=″″
while level !=0:
r=level%4
s=str(r)+s
③________
n=len(s)
ans=″″
start=4-n
for i in range(n):
ans +=④________
print(ans)
4.三階幻方又叫九宮格,是由 1,2,3,4,5,6,7,8,9 九個數字組成的一個三行三列的矩陣,其對角線、各行、各列的和都為15,如圖所示。
4 9 2
3 5 7
8 1 6
羅伯法(又稱為樓梯法)可以構造所有奇數階幻方。首先把1放在第一行正中,然后按如下規則依次放置剩下的n*n-1個數,具體步驟為:
(1)當前數要放的位置P優先考慮前一個數的右上一格(行號減1,列號加1)
(2)若位置P出了上界(行號超出了頂行),則將其放在底行(行號為n-1)
(3)若位置P出了右界(列號超出了最右列),則將其放在最左列(列號為0)
(4)若位置P已有數字或行列號均出界,則將其放在前一個數的下一格(行號加1,列號不變)
實現上述功能的Python程序如下,請在劃線處填入合適的代碼。
def odd_magic_square(n):
a=[[0]*n for j in range(n)]
i,j=0,n//2
for num in ①________:
a[i][j]=②________
i-=1
j+=1
if i<0 and j     ③________
elif i>=0 and j>=n: #出右界
     j=0
elif (i<0 and j>=n) or a[i][j]!=0:
     ④________
     j-=1
return a
size=int(input(″請輸入奇數階幻方數:″))
a=odd_magic_square(size)
for i in range(size):
for j in range(size):
print(f″{a[i][j]:3}″,end=″″)
print()
5.現有一個由n位大寫字母組成的密碼串,將其分成m段長度相同的子密碼串,已知n是m的倍數。小明編寫了一個Python程序,輸入密碼串和正確的子密碼串,檢查這m段子密碼串的正確情況。若子密碼串與正確的子密碼串不完全相同,則該子密碼串錯誤,需指出錯誤字符在該子密碼串中的位置。例如,密碼串為“ABCDEFGABBDKFGABCDEFKABCDGFG”,正確的子密碼串為“ABCDEFG”,則檢查結果如圖a所示,程序運行界面如圖b所示。
(1)密碼串為“ACDEFACDEEABDEFACDFF”,正確的子密碼串為“ACDEF”,則有________段子密碼串錯誤。(填:阿拉伯數字)
(2)實現上述功能的Python程序如下,請在程序劃線處填入合適的代碼。
pwst=input(″請輸入密碼串:″)
pwsubst=input(″請輸入正確的子密碼串:″)
n=len(pwst)
p=len(pwsubst)
m=n//p
errinfo=[″″]*m
cnt=0
for i in range(m):
j=0
①________
flagp=0;info=″″
while ②________:
if pwst[k]!=pwsubst[j]:
     flagp+=1
     info=info+″ ″+str(j+1)
j+=1
k+=1
if flagp>0:
③________=″第″+str(i+1)+″段錯誤!錯誤位置:″+info
    cnt+=1
print(″共有″,cnt,″段錯誤″)
for i in range(cnt):
print(errinfo[i])
6.在一個正整數序列中,由若干個連續的數據元素組成的序列,稱為該序列的子序列。現輸入一個整數序列和一個整數m,尋找一個滿足下列條件的子序列:
①該子序列的各元素之和不能超過m。
②在所有滿足條件①的子序列中尋找長度為最大(元素個數最多)的子序列。若滿足條件的子序列有多個,則輸出最左邊的子序列。
例如,整數序列為“1,5,4,2,3,1,5,8,1”,m的值為15,則元素之和不超過m的最長子序列有“[1,5,4,2,3]”和“[4,2,3,1,5]”,長度均為5,根據題目要求可知,最后輸出的最長子序列為“[1,5,4,2,3]”。讀入一個由整數組成的數據序列,輸入m,輸出符合條件的最長子序列及該子序列的長度。程序運行界面如圖所示。
序列為:[1,5,4,2,3,1,5,8,1] 請輸入m的值:15 最長子序列長度為:5 最長子序列為:[1,5,4,2,3]
請回答下列問題:
(1)若原序列為“3,5,4,5,2,3,1,8,3,4”,m=20,則輸出的最長子序列為________。
(2)函數sumif(b)的功能是求列表b中元素的前綴和,即sumx[1]=b[0],sumx[i]=b[0]+...+b[i-1],請在程序劃線處填入合適的代碼。
def sumif(b):
sumx[0]=0
for i in range(1,n+1):
sumx[i]=①________
return sumx
(3)主程序如下,請在程序劃線處填入合適的代碼。
#讀入數據,并存入列表 d 中,代碼略
print(″序列為:″,d)
n=len(d)
m=int(input(″請輸入 m 的值:″))
sumx=[0]*(n+1)
sumx=sumif(d)
maxn=0
maxposi=-1
for i in range(0,n+1):
j=i
while ②________:
j=j+1
if j-i-1>maxn:
③________
maxposi=i
print(″最長子序列長度為:″,maxn)
print(″最長子序列為:″,d[maxposi:maxn+maxposi])
7.最小覆蓋子串。輸入一個字符串s、一個字符串t,從左往右遍歷字符串s,返回s中涵蓋t所有字符的最小子串。如果s中存在多個最小子串,則輸出第一次出現的子串,如果s中不存在涵蓋t所有字符的子串,則輸出“找不到覆蓋子串”。
注意:對于t中重復字符,我們尋找的子字符串中該字符數量必須不少于t中該字符數量。示例1:輸入:s:ADOBECODEBANC
t:ABC
輸出:BANC
實現上述功能的Python程序代碼如下,請回答下列問題。
(1)若s=″ADOBECODEBANC″,t=″ABBC″,則結果為________。
(2)請在程序劃線處填入合適的語句。
編寫自定義函數count,采用字典dic統計字符串t中各個字母出現的次數。
def count(t):
dic={}
for i in t:
if i in dic:
     ①________
else:
     dic[i]=1
return dic
編寫自定義函數check,檢測字典dic2中字母有沒有覆蓋字典dic1中的字母
def check(dic1,dic2):
for zm in dic1:
if zm not in dic2 or ②________:
     return False
return True
主程序
s=input(″s:″)
t=input(″t:″)
f=False
length=len(t)
dic_t=count(t)
while length<=len(s):
start=0
for i in range(start,len(s)):
③________
dic_temp=count(temp)
if check(dic_t,dic_temp):
     print(″找到的第1個最小子串是:″,temp)
     f=True
     break
if f==True:
break
else:
④________
if f==False:
print(″找不到覆蓋子串″)
8.隨機生成一個僅由大寫字母″X″″Y″″Z″組成長度為 n 的字符串,消除該字符串連續3個及以上的相同字符。例如,字符串″XZZYYYYZYZ″,第一步:消除字符4個″Y″,得到新字符串″XZZZYZ″;第二步:消除3個字符″Z″,得到新字符串 ″XYZ″。實現上述功能的Python程序如下,請回答下列問題:
(1)如有字符串“XYYYXXZZY”,則消除后,字符串為:________。
(2)請在程序劃線處①②③④填入合適的代碼,實現程序功能。
import random
def left(s,x): #查找與s[x]連續相同的最左邊位置
while ①________:
x=x-1
return x
def right(s,x): #查找與s[x]連續相同的最右邊位置
while ②________:
x+=1
return x
n=int(input(″請輸入字符串的長度:″))
s=″″
for i in range(n): #隨機生成一個長度為n的字符串
m=random.randint(0, 2) #
③________
print(″生成的字符串為: ″,s)
i=0
while iL=left(s,i)
R=right(s,i)
if ④________:
s=s[:L]+s[R+1:]
⑤________
else:
i+=1
print(″最后的字符串為: ″,s)
9.世界衛生組織認為成年人正常血壓標準:收縮壓在90-140之間并且舒張壓在60-90之間(包含端點值)。現有監測到的連續若干天的血壓值,編程計算正常血壓持續的最長天數并輸出起止日期,若有多段最長天數,則輸出最后一段的起止日期。
(1)某段時間測量的血壓值如圖所示,則正常血壓持續的最長天數為________。
(2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。
″'
數組a中保存每天監測到的血壓值,a[2*i]和a[2*i+1]分別表示第i天的收縮壓和舒張壓,數組b保存日期數據,代碼略;
日期 收縮壓 舒張壓
9月1日 130 93
9月2日 132 87
9月3日 133 85
9月4日 128 78
9月5日 152 91
9月6日 125 86
″'
n=len(a)
t,ans,end=0,0,0
for i in range(n//2):
if 90<=a[2*i]<=140 and 60<=a[2*i+1]<=90:
t+=1
if ①________:
     ans=t
     end=i
else:
②________
print(″正常血壓持續的最長天數為:″,ans)
beg=③________
print(″起止日期:″,b[beg],″--″,b[end])
10.猜數游戲。游戲規則如下:設定一個秘密數,每猜錯一次會得到格式為“iAjB”的提示,其中“iA”表示數字猜對且位置也猜對的數有i個,“jB”表示數字猜對但位置沒猜對的數有j個。例如秘密數為“2507”時,若猜測數為“1702”,則提示是“1A2B”。
(1)現已知秘密數為“37692”,猜測數為“79612”,則提示是________。
(2)上述功能的部分Python程序如下,請在劃線處填入合適的代碼。
#將設定的秘密數存放于變量s中
while True:
g=input()
if g==s:
print(″猜對了″);break
i=A=B=0
cnt1, cnt2=[0] * 10, [0] * 10
while iif ①__________ :
     A+=1
else:
     cnt1[int(s[i])]+=1
     ②________
i+=1
for j in range(10):
m=min(cnt1[j],cnt2[j])
③________
print(″提示:″,str(A)+″A″+str(B)+″B″)
11.已知某年級有6個班級,所有學生名單存儲在文件“name.csv”中(如圖1),學校舉行某趣味活動項目中,需要每個班抽3名代表參加比賽,請編寫一個隨機抽取程序,執行效果如圖2。請回答以下問題:
(1)加框處代碼的作用是________。
(2)實現上述功能的部分Python程序如下,請在劃線處填寫合適的代碼。
import csv
import random
#數據讀入
f=open(″name.csv″,″r″)
flines=csv.reader(f)
name_list=[]
m=6 #班級總數
total=18 #參賽總人數
for line in flines:
if line[0]==″班級″: continue #跳過當前循環的剩余語句,繼續進行下一次循環
name_list.append(line)
①________
flag=[False]*n
grade=[3]*m
i=0
while ip=random.randint(②________,③________)
bj=int(name_list[p][0])
if flag[p]==False:
if grade[bj-1]>0:
    flag[p]=True
     ④________
     i+=1
print(″抽取名單為:″)
print(″班級″,″姓名″)
for i in range(n):
if flag[i]:
print(name_list[i][0],name_list[i][1])
12.對某二值圖像(顏色編號只有0、1)按如下規則對其進行數據壓縮:
(1)記錄原數據第1個位置的顏色編號;
(2)從左往右依次掃描顏色編號,統計并記錄連續出現的相同顏色編號個數:
例如:圖像的顏色編號壓縮結果為“0, 9, 8, 3”(用逗號分隔)
請回答下列問題:
(1)若某二值圖像按此規則壓縮的結果為“1,1,3,5,6”,則該圖像的顏色數據中有________個1。
(2)定義如下jys(s)函數,參數s存儲壓縮結果,為字符串類型,如“0, 9, 8, 3”。函數功能是實現數據解壓縮,函數以字符串類型返回原數據。請在劃線處填入合適的代碼。
def jys (s) :
d={″1″:″0″,″0″:″1″}
①________
ns=″″;p=s[0] ; i=2
while i < n:
num=0
while ②________:
     num=num*10 + int(s[i])
     i+=1
i+=1
for j in range (num) :
     ③________
p=d[p]
return ns
13.數組a中存儲的是左右交替上升的n個正整數,如程序中數據所示。依據對分查找思想,設計一個在數組a中查找數據key的程序。
a=[3,25,38,42,45,39,31,12]
n=len(a)
key=int(input(″輸入要查找的數:″))
i=0
j=①________
flag=False
while :
m=(i+j)//2
if key==a[m]:
flag=True
elif keyj=m-1
else:
i=m+1
if not flag and j>=0:
②________
if a[m]==key:
flag=True
if flag:
print(key,″找到了,位置為″,m+1)
else:
print(key,″未找到″)
(1)請在劃線處填入合適的代碼。
(2)加框處代碼有誤,請改正。
14.你是一名數據分析師,正在開發一個處理特定序列數據的應用程序,這些數據是以環狀序列的形式提供的。現在需要設計一個算法,能夠在這些環狀序列中找出最長升序子串(若有多組最長子串,則輸出最先出現那組)。例如環狀序列“BCEGHBCEFGA”中最長升序子串是“ABCEGH”。程序運行界面如圖所示。
請輸入序列數據:BCEGHBCEFGA 最長升序長度是:6 最長升序子串是:ABCEGH
實現上述功能的程序段如下,請回答下列問題:
(1)請在劃線處填入合適的代碼。
(2)加框處代碼有誤,請改正。
s=input(″請輸入序列數據:″)
n=len(s)
for i in range(n-1):
if :
break
if i==n-2:
k=n-1
maxc=n
else:
maxc=1
cnt=1
p1=i+1
p2=(p1+1)%n
while ①________ :
if s[p1]    cnt+=1
    if cnt>maxc:
      maxc=cnt
      ②________
else:
    cnt=1
p1=p2
p2=(p2+1)%n
print(″最長升序長度是:″,maxc)
s1=″″
for i in range(maxc):
s1=s[k]+s1
③________
print(″最長升序子串是:″,s1)
15.某停車場有一排連續的停車位。現在有兩種類型的汽車,大型車和普通車。大型車需要2個連續的停車位,而普通車只需要1個停車位。編寫程序,根據輸入數據,輸出空停車位數及還可以停放大型車的最多數量(不移動已停放的汽車)。輸入的數據樣例中e表示空車位,p表示被占用的車位。以“3e2p5e”為例,表示3個空車位,緊接著2個被占用的車位,再接著5個空車位,請回答下列問題:
(1)如果輸入數據樣例為“3e1p11e2p4e”,還可停放大型車最多數量為________個。
(2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。
def input_data(data):
park=[] #初始化停車場模型,0表示空車位,1表示占用c=0
for ch in data: #如果字符是數字,則更新c
if ″0″<=ch<=″9″:
     ①________
else:
     if ch==″e″:
       status=0
     else:
       status=1
for i in range(c):
     park.append(status)
c=0
return park
def cal(park):
empty=0; max_cars=0; i=0
②________
while iif park[i]==0:
     empty +=1
     if i < n-1 and park[i+1]==0:
       ③________
       max_cars +=1
      i +=1
i+=1
return empty,max_cars #返回兩個值
s=input(″輸入數據″)
park=input_data(s)
empty,max_cars=cal(park)
print(″空停車位數:″, empty,″可停放大型車最多數量:″, max_cars)
專題6 簡單算法及程序實現
知識點一
1.C [本題考查加密解密知識點的程序代碼理解。數字字符循環右移2位并順序組合,所以5→7,8→0,7→9。遇到其他字符則逆序組合得到密文。]
2.B [本題考查桶排序。第一個For循環中,語句b[i]+=1的功能是:利用桶對數組a中數據進行計數。桶的下標是有序的,對應數的值,按桶的編號輸出各個桶中的數。在第二個循環中,當b[j]值大于0時,開始重復地把j的值依次放在c數組中。]
3.B [第一個for循環是統計出現的數字,如果出現過,該數對應下標的a數組值為1,否則為0,并沒有統計各個數字出現的次數。接著從高位向位遍歷3個數字,將出現過的數字按先后順序拼接成一個3位整數。]
4.C [本題考查的循環結構。只有滿足a(i)>Key才進行判斷,找到第1個大于key的a(i)時,flag=False,min為最小數,因此是查找大于key的最小數,故答案為56。]
5.A [本題考查循環控制結構。continue語句用來告訴Python跳過當前循環,進行下一個循環。列表t中的值為'Student',f列表中有26個元素,可以看成一個桶,當某個字母出現,ord(t[i])-ord('a')對應的索引號的元素值為1,表示該字母出現過。將出現過的字母從小到大輸出。]
6.(1)C (2)elif car[3]=='1' (3)①calT(dic[car[1]],car[0]) ②(T+30)//60*price或int(T/60+0.5)*price
解析 (1)接USB口能獲取電源,并能主動發送信息,因此屬于有源電子標簽。(2)car[2]進出場狀態,car[3]表示車位狀態,當進場狀態為0且為收費車牌時,在字典dic創建一個車牌號碼為鍵,進場時間為值的鍵值對,只有收費車牌時才計算費用,而私家車是不用計費的。(3)①調用函數計算停車費用。calT函數的第1個參數為入場時間,第2個參數為出場時間,入場時間在dic字典中獲取,出場時間為當前記錄的時間。②計算費用。超過整小時部分,不足半小時的時長不計費,半小時及以上則按一小時計費,四舍五入計算整小時數,并按每小時5元計費。
7.(1)分治 (2)①dic[ips[i]]>maxn ②dic[ips[i]]=1 ③a=showmax(ips)
解析 (1)將一個大問題分解小的子問題,稱為分治思想。(2)①中根據出現次數,統計出現次數最多的IP地址。②選擇結構if ips[i] in dic:表示如果ips[i]已經在字典中,統計可能是最多次數,如果不在字典中,將在字母中新增一個元素。③將調用showmax函數統計ips列表的最多次數。
8.(1)①c[i]=c[i+1]+b[i] ②t=c[j]-c[p] ③j (2)c[j]解析 本題考查計數語句與前綴和。(1)①將統計100分到當前分數的各個分數的人數之和,如a[99]表示99分和100分的人數之和。②在print語句中有個人數t未賦值,最低分數線是j,p的初值為101,而c[101]的人數為0,因此該等級的人數和為當前分數人數和減去上一檔次的人數和,同時得到③答案為j。(2)在語句for i in range(len(djfs))中,變量i表示第i個等級,因此第i個等級為dj[i]*n,j的初值為100,每次減去1,表示分數,顯然c[j]小于int(dj[i]*n)要繼續,等于時表示已經達到要求,退出循環。
9.(1)126 (2)①t=i ②i解析 (1)第2個進入通道1有文件是文件6,因此總共時間為5+121=126。(2)①自定義函數minload的功能是計算n個傳輸通道中累計傳輸文件最小的通道,累計值存儲在upload列表中,返回最小存儲容量t。②處理前n個通道的累計容量,一一對應前n個文件的容量。③語句finish.append(upload[t][0])保存已經完成上傳的文件,upload[t][1]將保存累計上傳量。④查找最小查找上傳容量通道。
10.①m-1 ②f[n]=True ③red=i-p
解析 本題考查迭代的算法思想。把一個長度為n*100的線段分成m段,所有線段之和為一個定值n*100,每個線段的長度代表了紅包的金額,線段長度越長,金額越大。因此先產生m-1個線段,因此①處答案為m-1。每個線段的終點位置t取到,則f[t]的值為True,最后一個線段的終點必須是n,否則金額的總和不等于n,因此②處答案為f[n]=True。③p是每段的開始,初值為0,下斷的起點是該段的終點,因此該段的計算方法是i-p。
知識點二
1.D [變量i表示符合條件的起始位置,j表示結束位置。語句sum+=int(s[j])表示把數字串s中數字進行累加,當累加的值sum>k,表示累加的值太大,應減去前面第一個數字,開始位置i向后移動1,切片是一個左閉右開的區間,因此答案為D。]
2.A [滿足條件s[i]>s[i-1]表示比前一個數據大,因此該程序代碼是查找一個最長的連續遞增序列。]
3.(1)e-g1-43-5h-k (2)①ans+=line[i] ②writedata(ans) (3)ord(line[i+1])==ord(line[i])+1 and not flag或ord(line[i+1])==ord(line[i])+1 and flag==False
解析 本題考查一個集合中兩個元素的組合,或者是一段連續區間的開始位置和結束位置的遍歷。(1)略。(2)①當條件ord(line[i+1])!=ord(line[i])+1成立時,表示連續段已經結束,終點位置是i,因此需將line[i]連接入ans中。②讀取一行數據,處理完后調用writedata函數,將壓縮后的結果輸出保存到“壓縮后.txt”中。(3)找到連續段開始位置。Flag是一個是否是頭部的標志,初值為False,找到連續字符串的第1個位置后,flag的值變更為True。
4.①″0″<=i<=″9″ ②flag=True ③elif flag
解析 ①遍歷字符串s,如果遍歷到數字。②flag是數字串開始的標志,如果是數字則flag值為True。③若不是數字,分為前面是數字和前面不是數字兩種情況。
5.①range(len(s)-1) ②elif t2!=0 ③t1=int(s[-1])
解析 ①最后一位數單獨處理,因此先處理前面的數字。②分3種情況,當前數字0和非0,當前數字0及后面數字是0和非0。該處應填寫后面數字非0的情況。③取出最后一個數字。
6.(1)7或7.0 (2)① b[i]+a[i] ②n-k+1 ③b[i+k]-b[i]
解析 本題考查前綴和運用。(1)連續最大的3個數是9,4,8。(2)①b[i]存儲第i個人(不包含第i個人)前面所有人能力之和。變量i從0至n-1,那么其b[1]為a[0]的值,b[2]為a[0]+a[1],即b[1]+a[1]的值,b[3]為a[0]+a[1]+a[2],即b[2]+a[2]的值。②n個人中取出連續k個人,最大的開始位置i為n-k,若要取到n-k,其終值必須為n-k+1。③從位置i開始,連續k個值,其結束索引號為i+k-1,前i+k-1個人所有能力之和存儲在b[i+k]中,而這一段的能力和為b[i+k]-b[i]。
7.(1)①n-1 ②ssum[j]-ssum[i+1]<=m ③maxposi,maxposi+maxn (2)maxposi=j+1
解析 本題考查前綴和的操作。(1)①從后往前遍歷,因此第一個索引位置為n-1。②把索引位置i作為起點,往前查找第一個兩數之差大于m的位置j,因此條件為ssum[j]-ssum[i+1]<=m,因此最大序列的開始位置為j+1。③要輸出這個序列,序列的開始索引為maxposi,長度為maxn,可以得到區間。(2)略。
8.(1)29 (2)①a[i+1]==″0″ ②i+=3 ③s2=jy(s1)
解析 (1)解壓縮后為1個23,21個66,1個0,1個77,5個0,數據個數為1+21+1+1+5=29。(2)①從語句s+=″0″+″,″來看,解壓縮為一個0,某數為0且相鄰無重復,壓縮數據用兩個數表示,第1個為0,第2個為0;②循環for j用于解壓縮多個字符,因此壓縮用3個單位的數據,因此i將加3。③語句s1=i.split(″,\n″)是對文件文件中一行按逗號和換行符進行分隔,并把分隔后的內容保存在列表s1中,因此需調用函數來計算解壓縮后的數據。
9.(1)3-5,13-16 (2)①len(s) ②c=s[i]
解析 本題考查循環結構的綜合應用。(1)3個及以上都會被記錄起始點和終點。(2)for循環的作用為遍歷字符串s,記錄當前連續字符的個數,若總的個數大于或者等于3,則記錄開始位置和結束位置,直到訪問完所有字符結束。①遍歷字符串s的所有字符,此處填len(s)。②找到的元素值與上一個元素不一致,并且已記錄開始值和結束值,c重新賦值為當前位置上的字符。
10.(1)①y.append(int(data[1])) (2)②sqrt((x2-x1)**2+(y2-y1)**2)或sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))或((x2-x1)**2+(y2-y1)**2)**0.5 (3)③d1+d2-d3 ④long-maxd (4)maxd=dist(x[n-2],y[n-2],x[n-1],y[n-1])
解析 (1)分別讀取x和y點的坐標值。(2)利用兩點之間距離公式計算。(3)為機器人未取第i個硬幣少走的路程;Max為求中的最大值。dx表示未取第i-1個硬幣少走的路程。④機器人行走的最短距離為所有點的和與最大路程差。(4)循環for i in range(2,n)計算第i-1最大路程,i極值為n-1,求n-2時最大值,因此max初值當最后一個硬幣未取為最短距離。
11.(1)10 (2)①he=he-a[i-4]或he-=a[i-4] ②wd[x][0] ③flag或flag==True
解析 (1)從12號開始,5個滑動平均氣溫值大于等于10 ℃,他的前4天中,第1個日平均氣溫為10號。(2)①計算下一組滑動平均溫度時,需減去前面第4個溫度。②第一個大于等于10 ℃且小于22 ℃的日期。③當符合入春條件時,滿足條件if 10<=a[x]<22時,flag=False。
12.(1)2,5,1 (2)①ans=str(a[i])+','+ans ②flag==2 and a[i]>a[i-1] ③b[i-1]=gd
解析 本題考查數組的應用。其中列表a用于存儲輸入的數據元素,列表b用于記錄是否為拐點,n為輸入的數據元素個數,ans記錄最長搖擺子序列的具體元素,函數f(n)用于統計搖擺子序列的長度,若小于3,則不是搖擺子序列,若大于等于3,則構成搖擺子序列。函數f(n)中從后往前遍歷b數組,若為True,則i為拐點,將元素a[i]記錄到ans中,由于是從后往前遍歷數組,因此①空書寫ans=str(a[i])+','+ans。flag數組用于記錄搖擺序列的前一次狀態,若為初始狀態則為0,若為遞增狀態則為1,若為遞減狀態則為2。聯系前一個elif,則這次elif情況為:前一次狀態為遞減,且當前a[i]>a[i-1]時,變換狀態為遞增。因此②空書寫flag==2and a[i]>a[i-1]。循環中i從1開始進行枚舉a數組元素,gd記錄是否為拐點,是拐點則為True,否則是False。flag狀態未改變則不是拐點,gd值為False。由于flag是搖擺序列的前一次狀態,因此狀態變換時實際上拐點為i-1,因此③空用該書寫b[i-1]=gd。
13.(1)40 (2)①int(hours)*60+int(minutes) ②2,n+1或1,n+1 ③min<0 ④time[p2][k]-time[p1][k]
解析 (1)站點4在9:20有一班次,站點10發車時間為10點,因此大約用時40分鐘。(2)①將當前時間轉換距離0點0分的分鐘數量。times按冒號分隔,索引0為小時,索引1為分鐘,且均為字符串類型。將小時乘以60再加上分鐘即可。②找到一個大于當前班次的最早時間。③min的初值小于0,當時間差小于0時也需要更新。④計算兩個站點所用的時間。
知識點三
1.C [條件a[j]>a[k]表示查找一個最大值,在每趟遍歷中,找出該趟中最大值的位置k,并把f[k]的值賦為True,把最值位置存儲在數組p[i]中,答案為C。]
2.C [本題考查雙重循環語句實現。語句for j in range(i)指在當前i前面的位置,滿足條件a[i]>a[j]將b列表的值增加1,即統計該數大于他前面數的個數。A選項b列表的值依次為[0,1,2,2,4,3],B選項b列表的值依次為[0,1,1,3,0,2],C選項[0,0,2,2,0,2],C選項[0,1,2,0,2,5]。]
3.A [找出比該位置上數大的數的個數,并記錄在m數組對應的位置。比″81″大的數只有″9″,m[2]的初值為1,因此他排名第2。]
4.A [本題考查自定義函數。自定義isprime的功能是判斷num是否是素數。驗證100以內哥德巴赫猜想的正確性,由于4=2+2,正確;n從6開始的偶數,因此n表示遞增2。將n分解為j和n-j兩個數,如果這兩個數同時為素數,則驗證成功。]
5.(1)A (2)①sum==3 ②listn[int(s[i])]+1 ③k=listn[i]/num
解析 (1)數據呈現在二維表格中,屬于結構化數據。(2)①選擇的科目總和為3,符合題目要求。②int(s[i])表示科目代號,相應的科目增加1。③求每個學科的選科比例。
6.①a[j][1]>=175 and a[j-1][1]<175 ②i-1 ③i+=1
解析 本題考查多個過程的重復遍歷。選出身高大于等于175 cm的學生,隊內兩名成員的體重之和不能超過140公斤,找出最多的組合數量,應挑選出身高大于等于175且按體重降序排列,體重最大的和體重最輕的組合,達到組合數量最多。①把身高達到要求的學生盡量往前排,即后面的身高大于等于175,后面的沒有達到要求,不論體重。均要向前交換。②由于從后往前冒泡,前面的數據先有序,當條件a[i][1]<175成立時,表示索引i-1的數據中身高是大于等于175的。③當條件a[i][2]+a[j][2]<=140不成立時,意味著較重體重的選手不可能匹配到更輕體重的選手,因此要找下一位選手。
7.(1)枚舉 (2)找不到互質數對 (3)①random.randint(1,20) ②gcd(a[i],a[j])==1
解析 (1)遍歷每一種情況,并判斷是否符合問題的解,屬于枚舉算法。(2)全是偶數,不可能是互質數。(3)①隨機產生5個1到20之間的整數。②變量i和j是一對組合的下標,首先要判斷a[i]和a[j]的最大公約數是否為1。
8.(1)h (2)①s1[i-1]==s2[j-1] ②h=i (3)start+=1 (4)longstr(s1,s2)
解析 (1)只有一個共同字符h。(2)m是一個len(s2)+1行len(s1)+1列的二維列表,其每個元素的初值均為0。外循環i遍歷字符串s1,內循環j遍歷字符串s2,當兩個字符串中字符相等時,那么長度是前一次相等的基礎上加1,t表示具有相同字符的最大個數,找到最大個數時,需記錄其位置i。因此①表示兩個位置上字符相等,其索引位置為i-1和j-1。②為最大長度的結束位置h。(3)對st的每個位置start從0開始遍歷,則start不斷地向后移動。(4)略。
綜合題
1.(1)BDBA (2)①″0″<=x<=″9″ ②t1=t//4 ③flag=False
解析 (1)程序的功能是將1個十進制數字轉換4位二進制,分別取出高2位和低2位,再找到分別對應的ABCD編碼。7除4余3,商為1,因此為BD,4除4余0,商為1,因此為BA。(2)如果是數字進行轉換,不是數字,輸出非法數字,因此①判斷x是否是數字。③設置flag的值為False。②取出高2位。
2.(1)ZDBDBZDBDB (2)①j=start[i]+1 ②temp+=s[j] ③ans+s[j+1:]
3.(1)30 (2)①active+=0.5 ②active=active-base ③level=level//4 ④icon[start+i]*int(s[i])
4.①range(1,n*n+1) ②num ③i=n-1 ④i+=2
5.(1)3 (2)①k=i*p ②j6.(1)5,4,5,2,3,1 (2)sumx[i-1]+b[i-1]
(3)①sumx[j]-sumx[i]<=m ②maxn=j-i-1
7.(1)BECODEBA (2)① dic[i]+=1 ②dic1[zm]>dic2[zm] ③temp=s[i:i+length] ④length+=1
8.(1)ZZY (2)①x-1>=0 and s[x]==s[x-1] ②x+1<=len(s)-1 and s[x]==s[x+1] ③s+=chr(ord(″X″)+m) ④R-L>=2 ⑤i=L
9.(1)3 (2)①t>=ans或ans<=t ②t=0 ③end-ans+1
解析 (1)9月2日至4日,共計3天。(2)①若有多段最長天數,則輸出最后一段的起止日期,當t等于最大值時,取后者。②不符合要求時,將t初始化為0。③根據結束時間和最長天數,計算開始時間。
10.(1)2A2B 或″2A2B″ (2)①s[i]==g[i] ②cnt2[int(g[i])]+=1或cnt2[int(g[i])]=cnt2[int(g[i])]+1 ③B=B+m或B+=m
解析 (1)數字位置均正確的有2個,數字對位置錯的有兩個。(2)①檢測數字s[i]和猜的數字位置g[i]是否正確,變量A為數字位置正確的個數。②cnt1用于統計s中相應數字出現的次數,cnt2用于統計猜數g中相應數字出現的次數。 ③數字位置均正確的沒有統計在cnt1和cnt2中。若m=0,說明該數字或者沒有出現過,或者只在g或s某一個出現過,此時應不計數;若m=1,說明這個數字在g和s中均出現了1次,但沒有被統計到A中,即數字正確而位置不正確有1;若m=2,說明數字正確而位置不正確。
11.(1)讀取列表name_list中不包括標題行的數據 (2)①n=len(name_list) ②0 ③n-1 ④grade[bj-1]-=1
解析 (1)略。(2)①獲取列表name_list長度n。p為班級下標,從0至n-1。④grade存儲各班人數,當抽取該班一名學生后,其人數將減少一個。
12.(1)6 (2)①n=len(s) ②i解析 (1)第1個1表示代碼以1開頭,第2個1,表示1的個數,因此有1+5=6個1。(2)①對n賦值為s的長度。②不斷地向后查找數字。③num表示壓縮的數的個數,將這些數解壓縮并存在在ns中。
13.(1)①(n-1)//2 ②m=n-j-1或m=n-i (2)i<=j and not flag
14.(1)①pl!=i 或p2!=i+1 ②k=p2 ③k=(k-1+n)%n (2)s[i]>s[i+1]
15.(1)8 (2)①c=c*10+int(ch) ②n=len(park) ③empty+=1
解析 (1)連續空車位分別為3、11、4。可停放大型車最多數量為1+5+2=8 個。(2)①變量 c將字符串中的整數轉換成數字類型。②變量n存儲park數組長度,決定了循環次數。③若連續兩個位置均為空位,需跳過一個空位。③空位增加一個。

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 襄垣县| 珲春市| 南漳县| 乌拉特中旗| 天长市| 华安县| 甘谷县| 滦平县| 皋兰县| 三穗县| 曲水县| 吉首市| 宜兴市| 通州市| 抚顺市| 泸水县| 旌德县| 锦屏县| 突泉县| 宜昌市| 梁河县| 顺义区| 吉林省| 招远市| 江口县| 大城县| 苍山县| 鄂州市| 洪泽县| 共和县| 云安县| 古蔺县| 攀枝花市| 九龙坡区| 太和县| 易门县| 中西区| 平陆县| 临安市| 文昌市| 靖西县|