陣列相同資料統計的問題 |
答題得分者是:richtop
|
inglong
初階會員 發表:28 回覆:27 積分:36 註冊:2004-08-13 發送簡訊給我 |
大家好:
我現在有一個問題:就是我要統計輸入到陣列裡的資料有幾種
舉個例子:
i 0 1 2 3 4 5 6 7 8 9
A[i] 5 4 3 4 5 3 2 5 1 2 那得到的是 5有3個 4有2個 3有2個 2有兩個 1有1個 那我要將重複的去掉,變成都只有一個,也就是當前面如果有出現了
後面就不再出現
==>
ni 0 1 2 3 4
A[ni] 5 4 3 2 1 我的寫法是
for i:=0 to 100 do
begin
for j:=100 down to i 1 do
begin
if ( A[i]<>A[j] ) then
begin
B[i]:=B[j];
end;
else
begin
next;
end;
end;
end; 不過這樣好像還是一樣
請問各位有比較好的方法嗎?
謝謝~ 何需Coding爭峰
千人指 萬人鋒
敢問Coding頂峰
三尺秋水塵不染
天下無雙
------
何需Coding爭峰 千人指 萬人鋒 敢問Coding頂峰 三尺秋水塵不染 天下無雙 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
inglong 您好: 一個簡單作法,供您參考看看:
unit FindUnique0; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; MyArray = array[0..9] of integer; var Form1: TForm1; a : MyArray = (5, 4, 3, 4, 5, 3, 2, 5, 1, 2); b : MyArray; implementation {$R *.dfm} procedure showArray(ary :MyArray; len :integer); var k : integer; msg : string; begin for k:=1 to len do begin msg := msg Format('%d'#13, [ary[k-1]]); end; ShowMessage(msg); end; procedure TForm1.Button1Click(Sender: TObject); var k, p, total, len : integer; begin total := 0; len := High(a) - Low(a) 1; // get the size of array "a" showArray(a, len); if ( len>0 ) then total := 1; // more than one element case for k:=1 to len-1 do begin for p:=0 to total-1 do begin if ( a[k]=a[p] ) then break; end; if ( p>=total ) then // no same number found begin a[total] := a[k]; // add in new number total := total 1; end end; showArray(a, total); end; end.RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); var Ary :Array[0..High(Byte)]of Integer; Data:Array of Byte; i :Integer; s :String; begin SetLength(Data,100); for i:=0 to Length(Data)-1 do Data[i]:=Random(High(Byte)); //設定資料 FillChar(Ary,Sizeof(Ary),0); for i:=0 to Length(Data)-1 do Inc(Ary[Data[i]]); for i:=0 to High(Byte) do if(ary[i]>0)then ListBox1.Items.Add(Format('%0.2d,(%d)',[i,ary[i]])); end;發表人 - jest0024 於 2005/09/01 01:59:41 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |