主题:help~~~~
137950
[专家分:0] 发布于 2005-10-14 13:22:00
读入n个不相同且不为0的数(1<=n<=100),不用排序,求出其中第r个大的数(1≤r≤n),即有r-1个数比它大,其余的数都比它小。
例如:输入3,14,22,15,17,6,其中第3个大的数为15。
[em18]
回复列表 (共19个回复)
11 楼
幽游の白玉 [专家分:140] 发布于 2005-10-14 21:16:00
哈哈 那你的程序不是要很繁 傻瓜才这么干
12 楼
天空飞雪 [专家分:960] 发布于 2005-10-14 21:30:00
program el;
var a,b:array[1..100] of integer;
i,j,r,n:integer;
begin
read(n,r);
for i:=1 to n do begin read(a[i]); b[j]:=0 end;
for i:=1 to n do for j:=1 to n do if a[j]<a[i] then b[j]:=b[j]+1;
for i:=1 to n do if b[i]=r then write(a[i]:3);
readln;readln;
end.
13 楼
KID [专家分:820] 发布于 2005-10-14 23:01:00
河马,程序呢?
不过大象你也把程序帖上来啊
14 楼
michard9 [专家分:70] 发布于 2005-10-15 12:28:00
以下是c语言的实现方法,比较简陋,但是很好用
ps此程序未检测过
main()
{
int input[100]={0};
/*把数组input内的所有元素都赋值为0好像要用循环来实现,这里就简写
一下*/
int a=0,b,i,j;
clrscr();
在这里输入的程序(用户数的数据都放在input树组中)我就不写了,直接写主体
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
if(input[j]>a)
{
a=input[j];
}
if(input[i]==0)
{
break();
}
}
}
printf("%d",a);
}
15 楼
michard9 [专家分:70] 发布于 2005-10-15 12:29:00
还有11楼的,你能不能把自己的程序也贴上来啊?不要光说不练啊!
16 楼
maxumi [专家分:2200] 发布于 2005-11-15 11:16:00
那个....
算法时间复杂度达到了O(n)了.
当n太大的时候就Time Limit Exceed了...
请各位贴个O(logn)的算法好不好?
17 楼
dingsen [专家分:0] 发布于 2005-11-15 19:29:00
任意找m与它比,再缩小范围。仔细想。
18 楼
reallinan [专家分:800] 发布于 2005-11-15 22:56:00
使用二叉树,节点纪录该数值以及该节点左子树节点的个数。
读入数据,递归的将小数放在左边并将该节点左子树节点数目的计数+1。
19 楼
Blackfire [专家分:70] 发布于 2005-11-16 17:17:00
12楼的程序 其实就是 排序的 一种 繁过程
我来回复