蓝桥杯 区间k大数问题求各位解答啊。排序方面的错误,另外还有个小问题,都在注释里
若出剑 2016-04-26 03:59:38 /*蓝桥杯 区间k大数查询 */
#include<stdio.h>
int n;
int select(int l,int r,int k,int *a)
{
int i,j,t;
int b[n]; //数组大小不能做动态定义,我这样定义 为什么在dev下编译通过?n是变量啊
for(i=l;i<=r;i++)
b[i]=a[i];
for(i=l;i<r-l+1;i++)//冒泡排序算法
{
for(j=r-1;j>=i;j--)
{
if(b[j]<b[j+1])
{
t=b[j+1];
b[j+1]=b[j];
b[j]=t;
}
}
} //
for(i=l;i<=r;i++)
/*输出排序好的下标从l到r的值
发现错误处在此处 ,排序不正确,若下标从1开始,
排序结果对的,但从2开始就不对了
*/
printf("%d ",b[i]);
printf("\n");
return b[l+k-1];
}
int main()
{
int m;
int m1;
int l,r,k,i,j=0;
scanf("%d",&n);
int a[n];
int num[1000]={0};
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
m1=m;
while(m--)
{
scanf("%d%d%d",&l,&r,&k);
num[j++]=select(l,r,k,a);
}
for(i=0;i<m1;i++)
printf("%d\n",num[i]);
return 0;
}