奖学金pascal程序
題意
把總分排序
分析
先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那么規定學號小的同學 排在前面
var
a,t,p:array[0..300]of longint;
n,i,x,y,j:longint;
procedure kp(l,r:longint);
var
i,j,mid:longint;
begin
? ? if l>=r then exit;
? ? i:=l;j:=r;mid:=t[(l+r) div 2];
? ? repeat
? ? ? ? ?while t[i]>mid do inc(i);
? ? ? ? ?while t[j]<mid do dec(j);
? ? ? ? ?if (t[i]<t[j])or(t[i]=t[j])and(a[i]<a[j])or(t[i]=t[j])and(a[i]>a[j])and(p[i]>p[j]) then
? ? ? ? ?begin
? ? ? ? ? ? ?a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
? ? ? ? ? ? ?t[0]:=t[i];t[i]:=t[j];t[j]:=t[0];
? ? ? ? ? ? ?p[0]:=p[i];p[i]:=p[j];p[j]:=p[0];
? ? ? ? ? ? ?inc(i);dec(j);
? ? ? ? ?end;
? ? until(i>j);
? ? kp(l,j);
? ? kp(i,r);
end;
begin
? ? readln(n);
? ? for i:=1 to n do
? ? begin
? ? ? ? readln(a[i],x,y);
? ? ? ? t[i]:=a[i]+x+y;
? ? ? ? p[i]:=i;
? ? end;
? ? //kp(1,n);
? ? for i:=1 to n-1 do
? ? begin
? ? ? ? for j:=i+1 to n do
? ? ? ? if (t[i]<t[j])or(t[i]=t[j])and(a[i]<a[j])or(t[i]=t[j])and(a[i]>a[j])and(p[i]>p[j]) then
? ? ? ? ?begin
? ? ? ? ? ? ?a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
? ? ? ? ? ? ?t[0]:=t[i];t[i]:=t[j];t[j]:=t[0];
? ? ? ? ? ? ?p[0]:=p[i];p[i]:=p[j];p[j]:=p[0];
? ? ? ? ?end;
? ? end;
? ? for i:=1 to 5 do
? ? writeln(p[i],' ',t[i]);
end.
轉載于:https://www.cnblogs.com/YYC-0304/p/9500213.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的奖学金pascal程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序pascal程序
- 下一篇: 凌乱的yyy