給定n個正整數(shù),將它們分組,使得每組中的任意兩個數(shù)互質(zhì)(它們的最大公約數(shù)為1)。按照以下算法可以得到最少的組數(shù):
第一步:將第1個整數(shù)分到第1組;
第二步:嘗試將第2個至第n個整數(shù)分到已有的分組中,若能分到已有的分組中,則分到第一個符合條件的組;若不能分到已有的組,則分到新生成的組中。
例如對“70,99,25,54,11,100”6個整數(shù)分組,具體分組情況如下表所示a
組別 | 第1組 | |||||||
位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
值 | 2 | 70 | 99 | 0 | 0 | 0 | 0 | |
組別 | 第2組 | |||||||
位置 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ... |
值 | 3 | 25 | 54 | 11 | 0 | 0 | 0 | ... |
分組數(shù)據(jù):70,99,25,54,11,100
分組情況:
第1組:70 99
第2組:25 54 11
第3組:100
至少分:3組
實(shí)現(xiàn)上述功能的程序如下,請回答下列問題:
n=6
global a,b#定義a,b為全局變量
def gcd(num1,num2):
#求整數(shù)num1、num2的公約數(shù),代碼略
def dist(x,m):#把整數(shù)x進(jìn)行分組
dist=0
flag=False
For i in range(1,m+1):
flagp=True
②
for j in range(1,b[t]+1):
if gcd(x,b[t+j])>1:
flagp=False
break
if flagp==True:
b[t]+=1
b[t+b[t]]=x
flag=True
break
if flag==False:
t=m*(n+1)
b[t]+=1
③
dist=1
return dist
#輸入n個整數(shù),并存儲在列表a中,代碼略
b=[0]*(n*(n+1))#數(shù)組b分為n段,并將元素初始化為0
b[0]=1
b[1]=a[0]
cnt=1
s=””
For i in range(1,n):
cnt= ①
#輸出具體分組情況,代碼略
print(“至少分:”,str(cnt),”組”)
(1)按照上述算法,若有“25,15,18,22,51,33,7,62”8個整數(shù),至少分組數(shù)為
(2)請在橫線處填入合適的代碼。
【考點(diǎn)】設(shè)計應(yīng)用程序的界面.
【答案】見試題解答內(nèi)容
【解答】
【點(diǎn)評】
聲明:本試題解析著作權(quán)屬菁優(yōu)網(wǎng)所有,未經(jīng)書面同意,不得復(fù)制發(fā)布。
發(fā)布:2024/6/27 10:35:59組卷:0引用:1難度:0.3
相似題
-
1.有如下VB程序段:
在文本框Text 1中輸入“985-3+-”,執(zhí)行該程序段后,文本框Text2中顯示的值為( )發(fā)布:2025/1/2 11:0:1組卷:1引用:1難度:0.4 -
2.某 vb 工程的代碼窗口如圖所示,則下列說法正確的是( ?。?br />
發(fā)布:2025/1/2 11:0:1組卷:0引用:1難度:0.4 -
3.小李編寫了按奇數(shù)位數(shù)字升序和偶數(shù)位數(shù)字降序排列的 VB 程序,功能如下:程序運(yùn)行時,在標(biāo)簽 Label1 中顯示排序前的數(shù)字,單擊“排序”按鈕,在標(biāo)簽 Label2 中輸出排序的結(jié)果,運(yùn)行界面如圖所示。
實(shí)現(xiàn)上述功能的 VB 程序如下。
(1)根據(jù)程序代碼,窗體中顯示“排序”文字的按鈕對象名稱為_____。
(2)程序代碼中,加框處代碼有錯,請改正。
(3)程序代碼中,將 Label2.Caption 賦值語句補(bǔ)充完整。
(4)程序代碼中,與下劃線語句 i Mod 2=0 功能相同的是_____ (單選,填字母:A.j Mod2=1/B.(i+j) Mod 2=0/C.k<>i)發(fā)布:2025/1/2 11:0:1組卷:0引用:1難度:0.9