用array後如何使用置換 |
答題得分者是:小傑克
|
120030188
一般會員 發表:6 回覆:5 積分:2 註冊:2006-07-07 發送簡訊給我 |
[code delphi] procedure TForm1.SpeedButton2Click(Sender: TObject); var a : array[1..8] of Integer; i, j, tmp : Integer; begin a[1]:=adoquery4.FieldByName('小考1').AsInteger; a[2]:=adoquery4.FieldByName('小考2').AsInteger; a[3]:=adoquery4.FieldByName('小考3').AsInteger; a[4]:=adoquery4.FieldByName('小考4').AsInteger; a[5]:=adoquery4.FieldByName('小考5').AsInteger; a[6]:=adoquery4.FieldByName('小考6').AsInteger; a[7]:=adoquery4.FieldByName('小考7').AsInteger; a[8]:=adoquery4.FieldByName('小考8').AsInteger; for i:=1 to 8 do for j:=i 1 to 8 do if a[i] begin tmp := a[i]; a[i]:= a[j]; a[j]:=tmp; end; [/code] 假定原小考1[91],2[93],3[65],4[90],5[65],6[63],7[78],8[77] 經array後由大而小排列為1[93],2[91],3[90],4[78]..... 現要取得原小考前4次即變為[91],2[93],3[78],4[90] 我應該如何置換請各位前輩幫忙幫忙謝謝 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
|
120030188
一般會員 發表:6 回覆:5 積分:2 註冊:2006-07-07 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
120030188
一般會員 發表:6 回覆:5 積分:2 註冊:2006-07-07 發送簡訊給我 |
換句話說原array中是1[91],2[93],3[65],4[90],5[65],6[63],7[78],8[77]
我現在可以做到由大而小排列為1[93],2[91],3[90],4[78],5[77],6[65],7[65],8[63] 取前4大的值是ok----.1[93],2[91],3[90],4[78]將這些值跟原來的1[91],2[93],3[65],4[90]作置換也就是說91,93,90這3個分數不變動array位置 只將65分數跟78分數作置換這地方不知要怎樣著手請前輩幫忙---8次小考取最高4次小考如4次最高小考就在其中則 不動位置 ===================引 用 P.D. 文 章=================== 還是看不懂 ===================引 用 120030188 文 章=================== 也就是8取4的值原來的值如果是前4大的值就不變動原值如小於前4大就置換前4大其中1個值(其值的範圍為0-100) 不 知這樣的表達是否前輩了解 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
終於看懂了,但是好奇怪的做法....是要美化成績展示嗎? 用電腦大量調整.......
但是...同分要如何處理呢? 而且大分數排前面就表示---> 越考越差 (哈) 簡單一點的做法就是先找出前四大位置.....既然是有限範圍0-100的分數,就不需要用置換排序了, 我有個想法給你參考 < 由100往下找 > , 先找出位置然後鎖定非在前四個位置中數的和前四個中非前四大的數對換
------
額有朝天骨,眼中有靈光 |
120030188
一般會員 發表:6 回覆:5 積分:2 註冊:2006-07-07 發送簡訊給我 |
真的被大大猜中就是要美化分數,又怕人家說作的太假所以請我幫他修改成績單寄發
是否可舉程式讓我有實例參考,謝謝 ===================引 用 小傑克 文 章=================== 終於看懂了,但是好奇怪的做法....是要美化成績展示嗎? 用電腦大量調整....... 但是...同分要如何處理呢? 而且大分數排前面就表示---> 越考越差 (哈) 簡單一點的做法就是先找出前四大位置.....既然是有限範圍0-100的分數,就不需要用置換排序了, 我有個想法給你參考 < 由100往下找 > , 先找出位置然後鎖定非在前四個位置中數的和前四個中非前四大的數對換 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
像這種奇怪需求肯定是一次性使用.....用最快能完成的做法做一做就好
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var unLock:set of 1..4; a:array[1..8] of integer; b:array[1..4] of integer; i,j,k , temp:integer; s:string; begin a[1] := 91; a[2] := 77; a[3] := 65; a[4] := 90; a[5] := 65; a[6] := 63; a[7] := 78; a[8] := 93; k := 0; unLock := [1,2,3,4]; for i := 100 downto 0 do begin if k = 4 then break; for j := 1 to 8 do begin if a[j] = i then begin if j <= 4 then unLock := unLock - [j]; // 留下可以換的位置 k := k 1; b[k] := j ; // 紀錄前四名原來的位置 end; end; end; for i := 1 to 4 do begin if b[i] > 4 then // 前四高的分數,但位置不在前四的 begin for j := 1 to 4 do //看看1-4中哪一個可以換 begin if j in unLock then begin temp := a[b[i]] ; a[b[i]] := a[j]; a[j] := temp ; unLock := unLock - [j] ; break; end; end; end; end; for i := 1 to 8 do begin s := s IntToStr( a[i]) ',' ; end; Showmessage(s); end; [/code]
------
額有朝天骨,眼中有靈光 |
120030188
一般會員 發表:6 回覆:5 積分:2 註冊:2006-07-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |