来吧我又有一题不会了
pascal吧
全部回复
仅看楼主
level 12
紫弦☞ 楼主
题目描述
兔子小白是位数学爱好者,有一次它参加了兔界里的数学比赛,成绩公布后,小白很想知道自己的成绩到底排第几,现在请你帮它编一个程序,要求输入一个成绩,就能知道相应的名次。注意:同分的按相同名次算,且只算一次。
输入
输入共三行。
第一行:一个整数n(n<=30000)
第二行:n个正整数(这些数不大于1000)。
第三行:一个整数,需要查询的分数。
输出
输出共一行。
一个整数,查询成绩的名次。
样例输入730 50 80 60 20 50 6050
样例输出3
以下是我的代码
var n,i,j,x,t:longint;a:array[1..30000] of integer;
begin
read(n);
for i:=1 to n do read(a[i]);
read(x);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
for i:=1 to n do
if x<=a[i] then begin write(i);exit;end;
end.
在Pascal中测试正确,到了网站系统去提交却是时间超限
求破来吧
2014年12月17日 03点12分 1
level 9
主要是排序,效率太低了,试试二分法或快排吧
2014年12月17日 04点12分 2
level 7
计数排序吧
2014年12月17日 08点12分 3
level 11
想一种其他的方法不要排序。30000个超1s了。
2014年12月17日 13点12分 4
level 12
用计数排序吧
2014年12月17日 22点12分 5
level 11

2014年12月19日 04点12分 7
level 11

2014年12月19日 04点12分 8
level 9
var n,m,need,i,t:longint;
a:array [0..1001] of longint;
begin
fillchar(a,sizeof(a),0);
readln(n);
for i:=1 to n do
begin
read(m);
inc(a[m]);
end;
readln;
readln(need);
for i:=1001 downto 0 do
if a[i]>0 then
begin
inc(t);
if i=need then
begin
writeln(t);
halt;
end;
end;
end.
2014年12月19日 05点12分 9
1