請問這道題該怎么做:用隨機函數產生10個20~100之間的不同整數,然后按從大到小的順序排序輸出.我設計了以下的代碼Private Sub Form_click()Dim a(1 To 100) As IntegerDim i As Integer, j As Integer, t As IntegerFor i = 1 To 10a(i)=Int((100-20+1)*Rnd+20)Next iFor i = 1 To 9For j = i + 1 To 10If a(i) = a(j) Thena(i)=Int((100-20+1)*Rnd+20)End IfNext jNext iFor i = 1 To 9For j = i + 1 To 10If a(i) < a(j) Thent = a(i)a(i) = a(j)a(j) = tEnd IfNext jNext iFor i = 1 To 10Print a(i)Next iEnd Sub但不知道正確的答案是什么,我剛開始學vb,請高手們幫忙分析是否正確,另外能否給一段簡單一些的代碼來做這道題.前面也有問隨機函數題的,但看不懂,請高手們一定幫忙!
熱心網友
在檢驗兩個數相等并重新取值的部分設計思想有誤,重新取值后仍有可能有相等的數值!在下面修改過的程序中,如果比較兩個值相等,則從頭開始判斷,直到所有的數值都通過檢驗:for i= 1 to 9for j=i+1 to 10If a(i) = a(j) Thena(i)=Int((100-20+1)*Rnd+20)i=1j=2End IfNext jNext i當然以上并不是一個“最合理”/"最快"的思路,比較好的思路是隨機產生一個數,和已有的數進行比較,直到不相等為止:a(1)= 21+int(80*rnd)for i= 2 to 10a(i)= 21+int(80*rnd)for j= 1 to i-1if a(i)=a(j) thena(i)= 21+int(80*rnd)j=1end ifnext jnext i更進一步,可以把排序放在這部分同時進行?,F在是20個數據,如果是大量的數據,比如在10000個數據以上,更好的算法是用隨機步數(填空)法,避免大量的重復計算。