-
編譯通過。 測試資料 01:答案正確。 0ms
測試資料 02:正確答案。 0ms
測試資料 03:答案正確。 0ms
測試資料04:正確答案。 0ms
測試資料05:答案正確。 0ms
測試資料 06:答案正確。 0ms
測試資料 07:答案正確。 0ms
測試資料 08:答案正確。 0ms
測試資料09:正確答案。 0ms
測試資料 10:正確答案。 0ms
接受的有效分數:100 有效時間:0ms
program temp;
name:array[1..20]of char;
mo:integer;
ping:integer;
gan:char;
xi:char;
lun:integer;
z:integer;
end;var
m:char;
z,i,j,n,b,c,l,p:integer;
w:longint;
beginreadln(n);
for i:=1to n do
for j:=1to 20 do a[i].name[j]:=' ';
for i:=1to n do begin
read(m); l:=1;
while m<>' 'do begin
a[i].name[l]:=m;l:=l+1;read(m);
end;read(a[i].mo,a[i].ping);
read(m);read(a[i].gan);
read(m);
read(a[i].xi);
readln(a[i].lun);
if(a[i].mo>80)and(a[i].lun>0) then z:=z+8000;
if(a[i].mo>85)and(a[i].ping>80) then z:=z+4000;
if(a[i].mo>90) then z:=z+2000;
if(a[i].mo>85)and(a[i].xi='y') then z:=z+1000;
if(a[i].ping>80)and(a[i].gan='y')then z:=z+850;
a[i].z:=z;
z:=0;end;
for i:=1to n-1 do
for j:= i+1to n do
if a[i].z' 'do begin
write(a[1].name[c]);c:=c+1;
end;writeln;
writeln(a[1].z);
writeln(w);
end.
-
LS在冒泡,對吧? 我從未見過這樣的快速划船。
真正的快速排序應如下所示(假設被排序的陣列是 a,並且快速排序按公升序排序):
procedure qsort(l,h:integer);
vari,j,t,m:integer;
begini:=l; j:=h;
m:=a[(i+j) div 2];注意:這句話不能寫成:m:=(i+j) div 2;
repeat
while a[i]';
如果 i<=j,則注意它是 '<=';
begint:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;until i>j;請注意,它是乙個大於符號,而不是 '>=';
if il then qsort(l,j);這兩條線是遞迴搜尋的;
-
varn,t,i:integer;
a:array[1..100000] of integer;這裡,A 陣列用於儲存讀取和輸出的數量,可以根據問題使用。
其他變數的大小也可以根據題的要求進行更改,只要型別好。
procedure kp(l,r:integer);
vari,j,m:integer;
begini:=l;j:=r;m:
a[random(r-l)+1];這裡,“m:=a[random(r-l)+1]; “我使用的是隨機快速划船,也可以使用”m:=a[(l+r) div 2]; “走中間,快排,”m:
a[l];“普通快行,一般說來,效率隨機快行”取中間快行“普通快行”。
repeat
while a[i]m do dec(j);
if ij;
if j>l then kp(l,j);
if iend;
beginreadln(n);
for i:=1 to n do read(a[i]);
kp(1,n);
for i:=1 to n-1 do write(a[i],' ');
writeln(a[n]);
end.
-
假設陣列 a 中有 k 個元素,按公升序排列:
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]>a[i+1] then
beginc:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;假設陣列 a 中有 k 個元素,按降序排列:
for t:=1 to k-1 do
for i:=1 to k-1 do
if a[i]begin
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;函式名稱的所有者會自己新增它。
-
您使用的是FPC嗎?
FPC 演示文字的排序過程是標準的快速消耗。
-
這個從小到大,因為這兩句話。
whilex[i]k
dodec(j);
只需將它們換成大小即可。
whilex[i]>k
doinc(i);
whilex[j]dodec(j);
-
這個快速行欄看起來像這樣。
我會用我的程式告訴你。
proceduer kp(l,r:integer);
var c,d,e,f:integer;
beginc:=l;d:=r;e:=a[(l+r) div 2];
repeat
while a[c]e do dec(d);
if c<=d then begin
f:=a[c];a[c]:=a[d];a[d]:=f;
inc(c);
dec(d);
end;until c>d;
如果是 cd,則遞迴呼叫,如果 c 呼叫與剛才提到的內容相同的內容。
明白了?
-
procedure qsort(l,r:longint);
vari,j,k,mid:longint;
begini:=l;
j:=r;mid:=a[(l+r) shr 1];
repeat
而 a[i]《Jing Collapse Mid do Inc(i);
while a[j]>mid do dec(j);
if i<=j then
begink:=a[i]; a[i]:=a[j];a[j]:=k;
inc(i);
dec(j);
end;until i>j;
if iif lend;原創解決方案,歡迎!
-
vara:array[1..1000]of integer;
i:integer;
procedure qsort(l,r:integer);
vari,j,x,t:integer;x:當回族被破解時,判斷力就喪失了; t:交換資料。
begini:=l;j:=r;x:=a[(i+j)div 2];
repeat
while a[i]x do dec(j);找到小於 x 的數字。
if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j);end;交換。
until i>j;
if iif lend;begin
randomize;隨機種子。
for i:=1 to 100 do a[i]:=random(500);初始化陣列。
qsort(1,n);Dig Bi Tremor Sort 1 n (Fast Row) for i:=1 to 100 do write(a[i],'輸出。
end.
-
第一種是將中間數設定為中間數的序數,只要找到前幾個數字,第二種是將數字設定為中間數,並直接進行比較。
實際上,程式有點錯誤,它應該是 mid:=a[i+(i+j) div2],因為它是從開頭 i 開始的中間程式。
希望對您有所幫助,謝謝!
-
以下文字:
確定 MID,但 a[mid] 的值在排列過程中可能會發生變化。 比較了一下,換了。。。
所以這是錯誤的......
-
從理論上講,應該沒有區別,在帕斯卡中,底部應該不能正常工作,而頂部是正常方法。
-
pascal中的快速行是選擇乙個參考元素,將區間中的每個數字與參考元素進行比較,將大的放在右邊,小的放在左邊(觀察值可以隨意調整),給你乙個參考程式。 (程式不是唯一的,只要知道演算法就可以自由編寫,這裡我給出一種我習慣的寫法)。
var n,i,j:integer;
a:array[1..maxint] of integer;
procedure qsort(l,r:integer);
var i,j,k:integer;
begink:=a[l];
i:=l;j:=r;
repeat
而 (a[j]>=k) 和 (i5 所以 dec(j);
在這種情況下,j 指向 1,並且由於 1<5,a[j] 的值被分配給 a[i],並且 inc(i) 同時
序列為 1 10 3 1 9
現在 i 指向 10,因為 a[i]>k 是 10>5,所以 a[i] 的值被分配給 a[j] 和 dec(j),序列是 1 10 3 10 9
現在 j 指向 3,因為 a[j] 現在在序列 1 3 3 10 9 中
由於 i=j,我們退出重複迴圈,現在將 k 的值分配給 a[i] 以完成快速划船的回合。
不知道大家聽懂我說的話,如果不懂答案,可以直接把程式粘到pascal裡,然後用單步除錯來看看,會直觀地看到快划船的想法。 總體而言,快速襯裡是區間的連續縮小,以確定某個值在整個序列中的位置。 但是,快速排水的時間效率非常高,即o(n*log2 n)。
它是所有排序失敗中最快的,因此在學習 pascal 時,最常用的排序方法是快速排名。
呵呵,上面的段落可能有點難懂,但只要你了解了快速編排程式,應該不是什麼大問題。
-
二分法: 步驟: 1分解; 2.解決; 3.合併。
示例:p[1..]10]=
隨機選擇乙個犀利的游泳者:如銀牌和別針65
分為 3 個部分,即小於 65 和大於 65。
對小於 65 和大於 65 的排序。
我需要說點什麼。
很高興有你的問題,現在湖人隊主教練禪師有12個總冠軍,公牛隊有2個3連冠,2000年湖人隊有3個總冠軍,湖人隊最近有2個總冠軍,禪師在球員時代在尼克斯隊也拿過乙個,加起來有12個。 拉塞爾以11個冠軍成為球員贏得冠軍最多的球員,幫助凱爾特人隊連續八次奪冠。
應該是孫中山最,她的受歡迎程度毋庸置疑,孫中山最受歡迎女歌手也拿過4屆白石(這個被票淘汰了)和一些資訊:(如果你不相信,可以去驗證,搜尋一下): >>>More